Your crontab file should start with “crontab -l”!

I’ve never personally had this problem, but a number of people have told me that they’ve, often repeatedly, accidentally deleted their crontab by typing crontab -r (which silently removes a crontab) rather than crontab -l (which shows you what is in it) or crontab -e (which lets you edit it). It doesn’t help that “e” and “r” are next to each other on QWERTY keyboards.

Create a single backup of your crontab contents

Since I realised this was an issue, I’ve made the first line in my crontabs the following:

@daily crontab -l > ~/crontab.backup

If you ever accidentally use crontab -r, you can use crontab ~/crontab.backup to reinstall your crontab!

Adjust @daily to a time at which your computer is likely to be on, if it’s not always on, eg 0 10 * * * for 10am daily.

For bonus points, writing this entry reminded me that I hadn’t reinstalled my laptop’s crontab on my new machine, and meant it was easy for me to find and install!

Create timestamped backups of your crontab contents

The above is simple and suffices for me, but if you don’t have a backup routine that will grab ~/crontab.backup regularly enough for your needs, you could do something like this instead:

@daily mkdir -p ~/crontab-backups; crontab -l > ~/crontab-backups/crontab-`date +%Y%m%d-%H%M%S`; find ~/crontab-backups -type f -ctime +7 -delete

Explanation:

  1. mkdir -p ~/crontab-backups makes a directory crontab-backups in your home directory if it doesn’t already exist (and doesn’t complain if it does exist).
  2. crontab -l > ~/crontab-backups/crontab-`date +%Y%m%d-%H%M%S` puts your current crontab into a file named with a datestamp (eg crontab-20140711-124450 so that you can easily have more than one
  3. find ~/crontab-backups -type f -ctime +7 -delete finds all files (-type f) in ~/crontab-backups that were created more than 7 days ago (-ctime +7) and deletes them (-delete)

Warning: you don’t want to put anything else in ~/crontab-backups, because it too will be deleted after seven days.