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?
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It only takes a minute to sign up.
Sign up to join this communitycrontab -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/syslog
If 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
cron
that the file has been edited. It also won't work when the user has accidentally deleted their crontab
because there is no file to edit.
crontab -e
is a really common cron command.e
for edit andr
for remove with absolutely no prompt whatsoever!!alias crontab=crontab -i
. But crontab should have made that default, given that e & r are next to each other...