有没有办法验证 /etc/crontab 的格式?

有没有办法验证 /etc/crontab 的格式?

我更喜欢坚持计划任务,/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

超酷的 shell 脚本有一个验证 crontab 文件的 shell 脚本。

您可以获取包含该脚本的 zip 档案这里

该脚本名为验证程序

答案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查看最新一期日志)

相关内容