为什么在/etc/cron.hourly中放一个脚本不起作用?

我在/etc/cron.hourly放了一个可执行脚本,但是该脚本每小时都没有运行,实际上它根本就没有运行。

这是我制作的剧本(小时声音):

 #!/斌/庆典
 mplayer~ / Music / sfx_msg-highlight.wv&> / dev / null&
 spd-say -r -50 -p 50 -t male3“现在的时间是$(日期+”%l%p“)”
现在通知发送“它是:”“$(日期+”%l%p“)。”  -i~ / Pictures /“first tee.png”-t 5000

我的crontab是:

 DISPLAY=":0.0" XAUTHORITY="/home/naruto/.Xauthority" XDG_RUNTIME_DIR="/run/user/1000" 0 * * * * /home/naruto/Hour-sound.sh 

虽然mplayerspd-say命令运行正常,但notify-send却没有。 我也尝试将错误重定向到文件:

 0 * * * * /home/naruto/Hour-sound.sh 2>/tmp/error 

但这显示没有输出。 我究竟做错了什么?

正如您在问题的评论中看到的那样,/ /etc/cron.hourly cron.hourly(以及其他类似目录)中的cronjobs由run-parts执行。 run-parts对文件名有点挑剔。 默认情况下,它不执行文件名包含除(所有来自ASCII)之外的任何文件的文件

  • 大写字母
  • 小写字母
  • 数字
  • 下划线
  • 破折号(“减号”)

因此,如果您的脚本具有例如“myscript.sh”的文件名,则它将被忽略,因为run-parts不喜欢该点。

一个问题是你试图从cron运行图形应用程序( notify-send )。 这需要一点调整。 您需要在crontab中设置XAUTHORITYDISPLAY变量,以便它可以连接到正在运行的X会话,并且您需要设置XDG_RUNTIME_DIR以便它可以连接到您的pulseaudio会话。 不幸的是,这些需要在crontab中设置,所以你不能使用/etc/cron.hourly 。 相反,运行crontab -e并添加以下行:

 DISPLAY=":0.0" XAUTHORITY="/home/YOURUSERNAME/.Xauthority" XDG_RUNTIME_DIR="/run/user/1000" 0 * * * * /path/to/script.sh 

XDG_RUNTIME_DIR的值更改为从终端echo它们时返回的值。 在我的系统上,这是:

 $ echo $XDG_RUNTIME_DIR /run/user/1001 

它可能与你的相同,但先检查一下。 现在,您的脚本将每小时运行一次,并且应该按预期工作。

.sh结尾的脚本不在/etc/cron.hourly文件夹中执行:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=308911
如果句点是其名称的一部分,则由run-pars处理的目录内的链接或二进制文件(如/etc/cron.daily)将不会运行。

重命名脚本

 mv /etc/cron.hourly/Hour-sound.sh /etc/cron.hourly/Hour-sound 

或者将脚本调用放入

 /etc/crontab 

允许.sh结束

不要使用带扩展名的脚本(abc.sh)并添加你需要的地方。 (cron.hours)。

将你的代码添加到abc文件并保存。(根据你的需要)(这应该是bash命令)

使用

 sudo chmod +x abc 

命令生成可执行文件。

 edit etc/cronrtab file 

从你的分钟到小时线有一个预定义的几行。编辑并保存它。

然后它会正常运行。