今天晚上我第一次使用 cron,并开始遇到奇怪的结果。我尝试运行的脚本是一个看门狗,它允许我使用 Web 界面管理其他几个脚本。当我从 shell 运行看门狗脚本时,sudo ./watchdog.py
它每次都能正常工作,并启动它应该启动的脚本。当我将它添加到 crotab 时,sudo crontab -e
使用行*/1 * * * * /home/user/watchdog.py
,它不会启动它们,或者它们在启动后不久就崩溃了。这些脚本确实需要以 root 身份运行,所以我也尝试了*/1 * * * * sudo /home/user/watchdog.py
,但没有任何变化。
我的问题分为两部分。
1:我该如何解决这个问题?
2:是什么原因造成这种现象?
答案1
1:我该如何解决这个问题?
首先将脚本录制stderr
并stdout
保存到文件中(尽管默认情况下cron
应该会将输出内容发送给您)。您可以执行以下操作:
*/1 * * * * sudo /home/user/watchdog.py > /tmp/watchdog.log 2>&1
这会将脚本生成的所有输出放入其中/tmp/watchdog.log
。
仅供参考:请注意,这与它本身*/1
相同*
。
2:是什么原因造成这种现象?
如果requiretty
在 中设置了该标志/etc/sudoers
,sudo
则将仅从真实 TTY 运行(例如,从交互式登录会话运行)。这不一定是这里发生的情况,但值得检查。查找类似以下内容的一行:
Defaults requiretty
在/etc/sudoers
。