如何暂时禁用一个或多个用户的 cron 作业?特别是,我不想暂停用户的 cron 权限 - 只是不解雇他们的任何工作。
我使用的是 SLES 11 SP2 和 SP3 系统
答案1
(请注意,这个答案是在 systemd 之前写的。我还没有检查 systemd 版本的 cron 在这种情况下的行为方式。)
touch /var/spool/cron/crontabs/$username; chmod 0 /var/spool/cron/crontabs/$username
应该可以解决问题。使用 和 恢复chmod 600
(touch
您需要更改文件的 mtime 以使 cron(尝试)重新加载它)。
至少在 Debian 上,可能在一般的 Vixie cron 上,chmod 400 /var/spool/cron/crontabs/$username
也能做到这一点,因为该实现坚持要求权限恰好为 600。然而,这只持续到用户运行命令为止crontab
。
如果你想要一种强大的方法,我认为没有什么比暂时移开他们的 crontab 或更改权限更好的了,和暂时将它们添加到/etc/cron.deny
.
答案2
像这样禁用用户 crontab 怎么样:
crontab -l -u [username] >/tmp/[username].cron.tmp
crontab -r -u [username]
并重新启用:
crontab -u [username] /tmp/[username].cron.tmp
这还有一个额外的优点,即您可以以该用户身份运行它,而无需 root(只需去掉 -u 参数即可)。
答案3
如果您只想完全停止所有cron
作业一段时间——例如,在进行系统维护时,它们可能会与之产生不良交互——命令通常如下:
sudo systemctl stop crond.service
并且,恢复
sudo systemctl start crond.service
但请注意,某些系统使用cron.service
而不是crond.service
;您可以通过以下方式了解它:
$ systemctl list-units --type=service | grep cron
对于提出的具体问题来说有点过分了,但提供了“一站式购物”,并且不需要使用文件系统或临时文件。也适用于具有单个用户帐户的小型嵌入式系统(Raspberry Pi、Beagle Bone 等)。
答案4
您还可以使用
crontab -l | sed '/^\s*[0-9\*]/s/^/#---inserted-by-my-script---/' | crontab
并重新激活
crontab -l | sed 's/^\#---inserted-by-my-script---//'| crontab
第一行在#---inserted-by-my-script---
每行前面添加活动的 crontabs,第二行只是再次删除它。使用临时副本然后执行的问题crontab -r
是:您不能使用它两次。如果您删除了 crontab 并意外地用空副本覆盖了 crontab 的现有临时副本,则您没有备份。