确定 CRON 未运行的问题

确定 CRON 未运行的问题

我如何确定/etc/crontab未运行 cron 命令是否存在问题?我有发送电子邮件的脚本,我可以通过命令行手动运行它们,它们运行良好,但从未被 cron 处理过......

我该怎么做才能调试为什么 cron 没有运行?

我觉得这是问题的一部分......

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

答案1

您有几个选择,没有特定的顺序。

  • 在命令行上运行 crontab 中的命令。这可能具有欺骗性,因为通常这对您有用,而它在 cron 中无法运行的原因是缺少环境变量或类似的东西。

  • 向您的 crontab 行添加输出选项,例如:

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

  • 确保 cron 确实正在运行。

  • 检查你的 cron 日志文件是否存在任何特定错误。 

答案2

除了 @muffinista 和 @brent 的答案之外,在 Ubuntu 上你还可能遇到更多深奥的问题

  • 你的 crontab 末尾需要一个空白行。
  • 用户必须位于|未位于 /etc/cron.allow|cron.deny 中(或者这些文件不存在)
    • 用户不需要是 crontab 组的成员
  • cron 可能会忽略 /etc/cron.d/ 和类似目录中它不喜欢的文件名。
    • 添加 cron 的 '-l' 选项(影响在 'man run-parts' 中解释更多)
  • cron 通过 /bin/sh 发送 crontab 条目(默认情况下),因此像这样简单的事情将会失败,但粘贴到 /bin/bash 终端时可以工作

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

    所以改变 SHELL 或你的重定向语法! 

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

答案3

在最近的一些情况下,这是由于人们在编辑内容时/etc/crontab没有发送 crond 信号 1(SIGHUP)来让其知道应该重新读取文件/etc/crontab

尝试

kill -1 $PID-OF-CROND

看看是否有帮助。确定 crond 的 pid 留给您练习 ;-) - 尤其是因为如果您找不到它,则可能意味着 crond 没有运行,然后您就会发现您的问题!

答案4

如果您使用的是 shellscript,人们经常会忘记他们在脚本中使用的命令可能不在 cron 的 PATH 中(例如, 中的某个命令/opt)。根据需要在脚本开头正确设置 PATH。对于 sh/bash,它将是:

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

例如

相关内容