I entered crontab -r instead of crontab -e and all my cron jobs have been removed.
What is the best way (or is there one) to recover those jobs?
I entered crontab -r instead of crontab -e and all my cron jobs have been removed.
What is the best way (or is there one) to recover those jobs?
crontab -r removes the only file containing the cron jobs.
So if you did not make a backup, your only recovery options are:
/var/log/cron. The file will help you rewrite the jobs again. grep CRON /var/log/syslogIf you have no /var/log/cron file you can recover the commands (but not the timings) from the syslog.
grep 'CRON.*(yourusername)' /var/log/syslog
you can then figure out most timings by looking at the datestamps.
It sucks, but if you run crontab -r your crontab is gone forever. And unless you have a backup of it somewhere, you must grep through syslog files to get an idea of what/when jobs were being run, and recreate.
A good trick to avoid such problem is to add the following line to your crontab:
@daily crontab -l > $HOME/.crontab
This way your crontab is backed up every day to $HOME/.crontab, so if you delete it by accident, a relatively recent copy is available and can be installed by:
crontab < $HOME/.crontab
As an additional preventative measure in addition to backing up data, as mentioned by @anishsane, the -i flag will "prompt before deleting user's crontab". So, if you run crontab -i -r, it will give a nice
crontab: really delete <user>'s crontab? (y/n)
At which point you can select y or n. Of course, you don't want to type that out every time, so put this in your bash config and forget about it:
alias crontab="crontab -i"
As the -i flag doesn't affect any other command
vi /var/spool/cron/*user* or if you're the root user then vi /var/spool/cron/root