有没有一种方法可以验证/ etc / crontab的格式?


35

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

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

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


4
如果像我一样,您是来这里寻找一种简单的(无法编写脚本的)方法来告诉您是否正确设置了cron条目,那么您可能对cronchecker.net感兴趣-它是在线验证人与人的cron条目的工具,友好的输出。
马特·吉布森

Answers:


17

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

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,但这并没有向我显示这些日志条目,并且实际上由于某些原因,它似乎已经在两天前停止记录cron事件了)


在FreeBSD 10.3上测试。就像魅力一样工作,只需将日志路径替换为/ var / log / cron
Jette



3

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

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


0

在Ubuntu上,似乎可以运行:

crontab path/to/crontab/file

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

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

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

1
该命令会检查crontab文件,但会同时安装它(如果它不包含错误)。对于OP,这可能是有害的副作用。
新西兰元

感谢@NZD,我已将此添加到我的回复中以确保OP意识到这一点。
conradkdotcom's

@conradk命令不会启动cronjob,它会使用提供的文件覆盖用户现有的crontab文件。
MadHatter支持Monica

对于crontab的所有可能的问题,这实际上并不起作用。它会遇到一些明显的问题,但并不能解决这个问题,例如:* 4/0 * * /bin/myscript.sh - 4/0无效。但没有被这种方法捕获
JDS

@JDS不是步进值吗?步进值是0禁止的吗?unix.stackexchange.com/questions/32027/…–
conradkdotcom
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.