33

I prefer to stick scheduled tasks in /etc/crontab so I can see at a glance what's scheduled to run, regardless of which user the task runs as.

The only gotcha is that the format isn't validated on save, unlike crontab -e -- so a stray character can quietly break the entire cron.

Is there a way to validate the /etc/crontab format before/after save?

  • 4
    If, like me, you came here looking for a simple (non-scriptable) way to tell you whether you'd got your cron entry right, you might be interested in cronchecker.net — it's an online validator for cron entries with human-friendly output. – Matt Gibson Dec 20 '14 at 11:18
14

Another more recent solution is the python script chkcrontab

  • It doesn't check users' cronjobs yet – userlond Oct 19 '15 at 7:22
13

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)

11

Wicked cool shell scripts has a shell script that validates crontab files.

You can get the zip archive containing the script here

The script is called verifycron

2

I found this cool solution here: https://crontab.guru

It doesn't just validate the crontab, it tells you explicitly what and when the crontab will run, and highlights where errors are.

0

On Ubuntu, it seems like I can just run:

crontab path/to/crontab/file

NOTE: this has the side effect of starting this cronjob (thanks @NZD)

If the file is invalid, I will an error, like:

"crontab":11: bad minute
errors in crontab file, can't install.
  • 1
    this command does check the crontab file, but at the same time installs it (if it contains no errors). This is probably an unwanted side-effect for the OP. – NZD Dec 19 '16 at 1:18
  • Thanks @NZD, I've added this to my reply to make sure the OP is aware of that. – conradkdotcom Dec 19 '16 at 11:08
  • @conradk the command doesn't start the cronjob, it overwrites the user's existing crontab file with the file provided. – MadHatter Dec 19 '16 at 11:59
  • This doesn't actually work for all possible problems with the crontab; it will catch some glaring problems, but it doesn't catch this, for example: * 4/0 * * /bin/myscript.sh -- the 4/0 is invalid. but isn't caught by this method – JDS Jul 31 '17 at 14:23
  • @JDS Isn't it a step value? Is a step value of 0 forbidden? unix.stackexchange.com/questions/32027/… – conradkdotcom Aug 1 '17 at 12:18

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.