I just want to pause everything. Don't execute anything listed on crontab -l
.
10 Answers
First, back up the crontab:
crontab -l > my_cron_backup.txt
Then you can empty it:
crontab -r
To restore:
crontab my_cron_backup.txt
crontab -l
This works only for the crontab of the user who runs these commands, but it does not empty/restore crontabs of other users. My other answer is about suspending launches from all the users.
- 13,502
- 5
- 40
- 55
-
2This is particularly helpful when `/tmp` is corrupted (and if your crontab -e uses `mktemp` in `/tmp`. – Kevin Lee Mar 23 '15 at 15:17
-
1+1 Finally, this is what worked for me. Thank you – Pavan Jun 04 '15 at 23:25
-
@alex This should be the accepted answer – Luis Ferrao Sep 07 '18 at 08:52
-
1`crontab -r` is what I was looking for. Thanks ! – forzagreen Feb 26 '19 at 13:48
-
1If you are running your cronjobs in sudo better make sure you sudo first when backing up so you get the right one. – Cesar Bielich May 24 '22 at 18:15
Do you have root access? Just pause cron
sudo /etc/init.d/crond stop
Then restart it when you're ready
sudo /etc/init.d/crond start
- 1,196
- 7
- 6
-
10That is assuming you want to stop crontab for all users including root. The selected answer, and kubanskamac's answer would do it for just the current (desired?) user. – Kevin K Dec 15 '09 at 00:20
-
1our crond service had been stopped. This pointed us in right direction to check whether crond was running, and restart. – Paul May 24 '16 at 12:51
-
10
-
2
-
3
-
-
If you are using vi as editor, then just enter :%s/^/#/
in command mode. In all lines (%), it substitutes (s///) the begin of line (^) with a hash (#).
- 131
- 2
-
If you are not using vi as default editor, you can "force" usage of vi like `EDITOR=vi; crontab -e`, and than you can use the trick above. – Betlista Jan 25 '13 at 11:53
-
3
Wasn't happy with the options above since they weren't one liners.
To disable crontab -l | perl -nle 's/^([^#])/# $1/;print' | crontab
To enable crontab -l | perl -nle 's/^#\s*([0-9*])/$1/;print' | crontab
usage example ( edited to show it doesn't disable comments)
$ crontab -l
# Comment
0 0 * * 0 /opt/something.sh
$ crontab -l|perl -nle 's/^([^#])/# $1/;print'|crontab
$ crontab -l
# Comment
# 0 0 * * 0 /opt/something.sh
$ crontab -l|perl -nle 's/^#\s*([0-9*])/$1/;print'|crontab
$ crontab -l
# Comment
0 0 * * 0 /opt/something.sh
Tested this on RHEL and AIX , and should work out of the box without anything needed to be installed
-
1Also can look for specific details in the cronjob crontab -l | perl -nle 's/^#\s*([0-1*])/$1/;print if /.+mytexttofind.+/' – Jason Nov 06 '16 at 06:10
-
Could you please explain why comments are not affected? What is the pattern you use to detect them? – Sopalajo de Arrierez Dec 24 '17 at 23:39
-
Hm, under Debian Jessie I get the following error: `crontab: usage error: file name must be specified for replace`. It seems you have to specify a file (?) when using `crontab` without any parameters (which is `replace` by default). – fritzmg Dec 04 '18 at 14:06
In my limited testing, setting the shell to /bin/false works. You will still see /opt/job.sh
executing in your logs, but it will be a noop:
SHELL=/bin/false
*/1 * * * * root /some/job.sh
- 31
- 3
In any flavor of Unix/Linux that I know of (except maybe OpenBSD):
mv /var/spool/cron /var/spool/cron_is_disabled
This:
- disables crontabs of all users
- but not system /etc/crontab (/etc/cron.daily. etc.)
- persists across a reboot
- is a one-liner, duh :)
- 13,502
- 5
- 40
- 55
I got the idea from the answer provided by @segaps
To disable:
crontab -l | awk '{print "# "$1}' | crontab
To enable:
crontab -l | cut -c 3- | crontab
The only problem with the solution provided by segaps, is that it will uncomment the jobs, that are already commented by the user.
- 2,011
- 1
- 11
- 14
- 11
- 1
-
Disable command should be: crontab -l | awk '{print "# "$0}' | crontab – Raymond Chiu Aug 25 '20 at 08:49
You can use the following like so:
crondisable
cronenable
crondisable some_other_user
...
The zsh
code (put in your .zshrc
):
ecerr () {
print -r -- "$@" >&2
}
crondisable() {
local user="${1:-$(whoami)}"
local cronpath="/tmp/$user.cron.tmp"
test -e "$cronpath" && {
ecerr "There is already a disabled crontab at $cronpath. Remove that manually if you want to proceed."
return 1
}
crontab -l -u $user > "$cronpath"
crontab -r -u $user
}
cronenable() {
local user="${1:-$(whoami)}"
local cronpath="/tmp/$user.cron.tmp"
test -e "$cronpath" || {
ecerr "No disabled cron at $cronpath"
return 1
}
crontab -u $user "$cronpath"
mv "$cronpath" "${cronpath}.bak"
}
- 121
- 1
- 9
To do this, using nano as the editor:
sudo env EDITOR=nano crontab -e
then comment out each line you don't want to run with #
- 5,347
- 9
- 54
- 80