how to temporarily disable a user's cronjobs?
touch /var/spool/cron/crontabs/$username; chmod 0 /var/spool/cron/crontabs/$username
should do the trick. Restore with chmod 600
and touch
(you need to change the file's mtime to make cron (attempt to) reload it).
On at least Debian and probably with Vixie cron in general, chmod 400 /var/spool/cron/crontabs/$username
also does the trick, because that implementation insists on permissions being exactly 600. However this only lasts until the user runs the crontab
command.
If you want a robust way, I don't think there's anything better than temporarily moving their crontab out of the way or changing the permissions, and temporarily adding them to /etc/cron.deny
.
How about something like this to disable a user crontab:
crontab -l -u [username] >/tmp/[username].cron.tmp
crontab -r -u [username]
and to re-enable:
crontab -u [username] /tmp/[username].cron.tmp
This has the added advantage that you can run it as that user without needing root (just take the -u parameter away).
If you just want to stop all cron
jobs entirely for a while -- for example, while doing system maintenance which they might interact badly with -- the commands are normally
systemctl stop crond.service
and, to resume
systemctl start crond.service
I presume you need root or wheel authority to execute those; if necessary, run them via sudo or (last resort) log in as root.
Overkill for the specific question posed, but provides "one-stop shopping" and doesn't require playing with the filesystem or temporary files.