我有一个notify.sh
如下脚本:
notify-send "hi welcome"
我的 crontab 下午 2 点通知:
0 14 * * * home/hacks/notify.sh
但是,这不起作用。问题是什么?
答案1
您的脚本在开头缺少一个 #! 行,这是内核解释的魔法,用于说明要为脚本使用哪个命令解释器。
让它看起来像这样:
#!/bin/sh
notify-send "hi welcome"
并确保脚本是可执行的:
ls -l home/hacks/notify.sh
chmod +x home/hacks/notify.sh
ls -l home/hacks/notify.sh
另外,既然您要求每天只执行一次,那么 crontab 的时区是否与您自己的时区相同?您可能会发现这种情况发生在格林威治标准时间下午 2 点。
答案2
让 crontab 运行起来很简单。这里我将介绍如何运行 crontab 作业。这对任何被 crontab 难住的人来说都很有用。
*/1 * * * * cd /home/hacks && sh notify.sh
为了使脚本可执行,我们必须执行以下操作:
chmod +x home/hacks/notify.sh
这里我每隔一分钟运行一次这个脚本...通过执行下面的脚本,您可以将其写入日志文件中以查看其是否正常工作
写日志
*/1 * * * * cd /home/hacks && sh notify.sh>>test.log
发送邮件
*/1 * * * * cd /home/hacks && sh notify.sh>>test.log | mail -s "Hi this is example" [email protected]
答案3
4个假设:
cron 守护进程未运行(执行
ps axfww | grep cron
并检查)通知发送 (notify-send) 尝试将输出发送到终端或 X 会话 - 但是它是在环境内部运行的
cron
,并且它不知道“与谁对话”,可以这么说。你的脚本不可执行
crontab 脚本中的路径
home/
与执行脚本的用户相关。请尝试使用完整路径
答案4
首先,我们需要使用命令编辑 crontab crontab -e
,然后在其中Crontab
添加可执行脚本的路径,在您的情况下像这样
* 14 * * * home/hacks/notify.sh >/dev/null 2>&1
。
启动/停止/重启 cron 服务
/etc/init.d/crond start /stop / restart
service crond start /stop /restart
systemctl stop crond.service
systemctl 停止 crond.service