为什么在/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
虽然mplayer
和spd-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中设置XAUTHORITY
和DISPLAY
变量,以便它可以连接到正在运行的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
从你的分钟到小时线有一个预定义的几行。编辑并保存它。
然后它会正常运行。