确定CRON未运行的问题

如何确定/etc/crontab没有运行cron命令的问题? 我有发送电子邮件的脚本,我可以通过命令行手动运行他们,他们工作很好,但从来没有得到处理的cron ….

我能做些什么来debugging为什么cron不运行?

我有一种感觉,这是问题的一部分…

 $ sudo /etc/init.d/crond start sudo: /etc/init.d/crond: command not found 

你有几个select,而不是以任何特定的顺序。

  • 在命令行上运行crontab中的命令。 这可能是有欺骗性的,因为这通常会适用于你,它不在cron中运行的原因是缺less一个环境variables,或者沿着这些线。

  • 添加一个输出选项到你的crontab行,例如:

    5 */2 * * * /usr/local/bin/do-stuff.sh >> /tmp/results.log;

  • 确保cron实际上正在运行。

  • 检查您的cron日志文件是否有任何特定的错误。

除了@muffinista和@ brent的答案之外,还有更多深奥的问题可以在Ubuntu上运行

  • 你需要在你的crontab结尾处有一个空行。
  • 用户必须在| not-in /etc/cron.allow | cron.deny(或者没有这些文件)
    • 用户不需要成为组crontab的成员
  • cron可能忽略在/etc/cron.d/和类似的目录下不喜欢的文件名。
    • 添加cron的'-l'选项(更多的影响在“man run-parts”中解释)
  • cron通过/ bin / sh(默认情况下)发送crontab条目,所以看起来很简单,但是会失败,但是当你粘贴到你的/ bin / bashterminal

    0 * * * * echo hi >& /dev/null

    所以改变SHELL或你的redirect语法!

我的Ubuntu版本忽略了/ etc / defaults / cron中的设置,所以为了提高日志级别,您可能需要手动运行cron守护进程(cron -f -L 2)。

在最近的一些情况下,这是由于人们在/etc/crontab编辑东西而不发送crond signal 1(SIGHUP)让它知道它应该重读/etc/crontab文件。

尝试

 kill -1 $PID-OF-CROND 

看看是否有帮助 确定crond的pid是作为练习留给你的;-) – 尤其是因为如果你找不到它,这可能意味着crond没有运行,那么你会发现你的问题!

如果你使用的是shell脚本,人们往往会忘记他们在脚本中使用的命令可能不在cron的PATH中(例如/opt某些东西)。 根据需要在脚本的开头正确设置PATH。 对于sh / bash,这将是:

 PATH=$PATH:/opt/something-1.0/bin 

例如