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

Ben*_* K. 50 cron

我更喜欢将计划任务放在 /etc/crontab 中,这样无论任务以哪个用户身份运行,我都可以一目了然地看到计划运行的内容。

唯一的问题是,与 crontab -e 不同,格式在保存时未得到验证——因此一个流浪字符可以悄悄地破坏整个 cron。

有没有办法在保存之前/之后验证 /etc/crontab 格式?

miv*_*ivk 33

我找到的唯一可靠的方法是检查日志。

cron/etc/crontab每分钟检查一次,并记录一条消息,表明它已重新加载它,或者它发现了错误。

所以在编辑之后,运行这个:

sleep 60; grep crontab /var/log/syslog | tail
Run Code Online (Sandbox Code Playgroud)

或者,不要等待整整一分钟,而是只等待下一分钟 + 5 秒:

sleep $(( 60 - $(date +%S) + 5 )) && grep cron /var/log/syslog | tail
Run Code Online (Sandbox Code Playgroud)

带有错误的示例输出:

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)
Run Code Online (Sandbox Code Playgroud)

良好的输出:

Jan  9 19:19:01 r530a cron[107258]: (*system*) RELOAD (/etc/crontab)
Run Code Online (Sandbox Code Playgroud)

那是在 Debian 8 上。在其他系统上,cron 可能会登录到不同的文件。

(我以为我可以通过使用 systemd's 来避免寻找正确的日志文件journalctl -u cron,但这并没有向我显示这些日志条目,实际上似乎由于某种原因在 2 天前停止了记录 cron 事件)


小智 15

另一个更新的解决方案是 python 脚本chkcrontab

  • 它尚未检查用户的 cronjobs (2认同)

Lud*_*erl 11

邪恶的酷 shell 脚本有一个 shell 脚本来验证 crontab 文件。

您可以在此处获取包含脚本的 zip 存档

该脚本名为verifycron


JDS*_*JDS 5

我在这里找到了这个很酷的解决方案:https : //crontab.guru

它不仅验证 crontab,它还明确告诉您 crontab 将运行的内容和时间,并突出显示错误所在。