奇怪的 crontab 行为

奇怪的 crontab 行为

今天晚上我第一次使用 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:我该如何解决这个问题?

首先将脚本录制stderrstdout保存到文件中(尽管默认情况下cron应该会将输出内容发送给您)。您可以执行以下操作:

*/1 * * * * sudo /home/user/watchdog.py > /tmp/watchdog.log 2>&1

这会将脚本生成的所有输出放入其中/tmp/watchdog.log

仅供参考:请注意,这与它本身*/1相同*

2:是什么原因造成这种现象?

如果requiretty在 中设置了该标志/etc/sudoerssudo则将仅从真实 TTY 运行(例如,从交互式登录会话运行)。这不一定是这里发生的情况,但值得检查。查找类似以下内容的一行:

Defaults requiretty

/etc/sudoers

相关内容