我如何确定/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
例如