it-swarm.cn

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

我更喜欢将计划的任务粘贴在/ etc/crontab中,这样一眼便可以看到计划运行的内容,而与任务运行的是哪个用户无关。

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

有没有一种方法可以在保存之前/之后验证/ etc/crontab格式?

37
Ben K.

我发现的唯一可靠方法是检查日志。

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事件)

20
mivk

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

14
Dave Wongillies

邪恶的酷Shell脚本 具有用于验证crontab文件的Shell脚本。

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

该脚本称为verifycron

11
Ludwig Weinzierl

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

它不仅验证crontab,还明确告诉您crontab将在何时何地运行,并突出显示错误在哪里。

3
JDS

在Ubuntu上,似乎可以运行:

crontab path/to/crontab/file

注意:这具有启动此cronjob的副作用(感谢@NZD)

如果文件无效,我将报错,例如:

"crontab":11: bad minute
errors in crontab file, can't install.
0
conradkdotcom