Is there a way to validate /etc/crontab’s format?
The only reliable way I found is to check the log.
cron
checks /etc/crontab
every minute, and logs a message indicating that it has reloaded it, or that it found an error.
So after editing, run this:
sleep 60; grep crontab /var/log/syslog | tail
Or, to not wait a full minute, but only until the next minute + 5 seconds:
sleep $(( 60 - $(date +%S) + 5 )) && grep cron /var/log/syslog | tail
Example output with an error:
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)
Good output:
Jan 9 19:19:01 r530a cron[107258]: (*system*) RELOAD (/etc/crontab)
That's on Debian 8. On other systems, cron might log to a different file.
(I thought I could avoid hunting for the right log file by using systemd's journalctl -u cron
, but that didn't show me these log entries, and actually seems to have stopped logging cron events 2 days ago for some reason)
Another more recent solution is the python script chkcrontab