WTF?! My cronjob doesn't run?!
这是一个调试不运行cronjobs的清单指南:
Cron守护程序是否正在运行?
运行 ps ax | grep cron 并寻找cron .
Debian: service cron start 或 service cron restart
cron工作了吗?
* * * * * /bin/echo "cron works" >> /tmp/file
语法正确吗?见下文 .
您显然需要对要将输出重定向到的文件具有写访问权限 . /tmp 中当前不存在的唯一文件名应始终可写 .
该命令是否独立运行?
通过在CLI上执行干运行来检查脚本是否有错误
在测试命令时,请测试您正在编辑其crontab的用户,该用户可能不是您的登录名或root用户
cron可以运行你的工作吗?
检查 /var/log/cron.log 或 /var/log/messages 是否有错误 .
Ubuntu: grep CRON /var/log/syslog
Redhat: /var/log/cron
检查权限
在命令上设置可执行标志: chmod +x /var/www/app/cron/do-stuff.php
如果将命令输出重定向到文件,请验证您是否有权写入该文件/目录
检查路径
检查she-bangs / hashbangs行
不依赖于像PATH这样的环境变量,因为它们的值在cron下可能与交互式会话中的值不同
调试时不要抑制输出
常用的是这种抑制: 30 1 * * * command > /dev/null 2>&1
重新启用标准输出或标准错误消息输出
Still not working? Yikes!
提高cron调试级别
Debian
in /etc/default/cron
设置 EXTRA_OPTS="-L 2"
service cron restart
tail -f /var/log/syslog 查看执行的脚本
Ubuntu
in /etc/rsyslog.d/50-default.conf
添加或注释掉行 cron.crit /var/log/cron.log
重装 Logger sudo /etc/init.d/rsyslog reload
重新运行cron
打开 /var/log/cron.log 并查找详细的错误输出
提醒:完成调试后,停用日志级别
再次运行cron并检查日志文件
Cronjob Syntax
# Minute Hour Day of Month Month Day of Week User Command
# (0-59) (0-23) (1-31) (1-12 or Jan-Dec) (0-6 or Sun-Sat)
0 2 * * * root /usr/bin/find
对于 root 用户,此语法是 only 正确 . 普通用户 crontab 语法没有User字段(不允许普通用户像其他任何用户一样运行代码);
# Minute Hour Day of Month Month Day of Week Command
# (0-59) (0-23) (1-31) (1-12 or Jan-Dec) (0-6 or Sun-Sat)
0 2 * * * /usr/bin/find
Crontab Commands
crontab -l
列出所有用户的cron任务 .
crontab -e ,针对特定用户: crontab -e -u agentsmith
开始编辑crontab文件的会话 .
退出编辑器时,会自动安装修改过的crontab .
crontab -r
从cron假脱机程序中删除crontab条目,但不从crontab文件中删除 .