我更喜欢坚持计划任务,/etc/crontab
这样我就可以一眼看到计划运行的内容,而不管任务以哪个用户身份运行。
唯一的问题是,保存时格式没有经过验证,不像crontab -e
- 所以一个流浪的角色可以悄悄地破坏整个 cron。
/etc/crontab
有没有办法在保存之前/之后验证格式?
答案1
我发现唯一可靠的方法是检查日志。
cron
每分钟检查/etc/crontab
一次,并记录一条消息,表明已重新加载或发现错误。
编辑后,运行以下命令:
sleep 60; grep crontab /var/log/syslog | tail
或者,不等待一分钟,而只等待下一分钟 + 5 秒:
sleep $(( 60 - $(date +%S) + 5 )) && grep cron /var/log/syslog | tail
带有错误的示例输出:
Jan 9 19:10:57 r530a cron[107258]: Error: bad minute; while reading /etc/crontab
Jan 9 19:10:57 r530a cron[107258]: (*system*) ERROR (Syntax error, this crontab file will be ignored)
良好的输出:
Jan 9 19:19:01 r530a cron[107258]: (*system*) RELOAD (/etc/crontab)
这是在 Debian 8 上。在其他系统上,cron 可能会记录到不同的文件。
(我以为我可以通过使用 systemd 来避免寻找正确的日志文件journalctl -u cron
,但它并没有向我显示这些日志条目,而且实际上由于某种原因似乎在 2 天前就停止了记录 cron 事件)
答案2
另一个较新的解决方案是 Python 脚本chkcrontab
答案3
答案4
正如@mivk 在其回答中指出的那样,跟踪日志是我认为的最佳解决方案。
journalctl
也是一个不错的选择:
vedant@zebronics:~$ journalctl -u cron.service
... <hit shift+G to goto last line>
Nov 03 10:33:01 zebronics cron[627]: (*system*) RELOAD (/etc/crontab)
(点击shift+G
查看最新一期日志)