WTF ?! 我的cronjob无法运行?
这是调试未运行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
- 红帽:
/var/log/cron
- 检查
- 检查权限
- 在命令上设置可执行标志:
chmod +x /var/www/app/cron/do-stuff.php
- 如果将命令的输出重定向到文件,请验证您是否有权写入该文件/目录
- 在命令上设置可执行标志:
- 检查路径
- 检查她刘海/ hashbangs线
- 不要依赖PATH之类的环境变量,因为在cron下它们的值可能与在交互式会话下不一样
- 调试时不要抑制输出
- 常用的是这种抑制:
30 1 * * * command > /dev/null 2>&1
- 通过
>/dev/null 2>&1
完全删除重新启用标准输出或标准错误消息输出;或重定向到您具有写访问权的位置的文件:>>cron.out 2>&1
将标准输出和标准错误附加到cron.out
调用用户的主目录中。
- 常用的是这种抑制:
还是行不通? kes!
- 提升cron调试级别
- 德比安
- 在
/etc/default/cron
- 组
EXTRA_OPTS="-L 2"
service cron restart
tail -f /var/log/syslog
查看执行的脚本- 的Ubuntu
- 在
/etc/rsyslog.d/50-default.conf
- 添加或注释掉行
cron.crit /var/log/cron.log
- 重新加载记录器
sudo /etc/init.d/rsyslog reload
- 重新运行cron
- 打开
/var/log/cron.log
并查找详细的错误输出 - 提醒:调试完成后,停用日志级别
- 运行cron并再次检查日志文件
Cronjob语法
# 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用户正确。普通用户
crontab语法没有“ 用户” 字段(不允许普通用户像其他任何用户一样运行代码);
# 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命令
crontab -l
- 列出所有用户的cron任务。
crontab -e
,针对特定用户:crontab -e -u agentsmith
- 开始您的crontab文件的编辑会话。
- 退出编辑器时,将自动安装修改后的crontab。
crontab -r
- 从cron后台处理程序中删除您的crontab条目,但从crontab文件中删除。



