如何暂时禁用用户的cronjobs?

如何暂时禁用用户的cronjobs?

如何暂时禁用一个或多个用户的 cron 作业?特别是,我不想暂停用户的 cron 权限 - 只是不解雇他们的任何工作。

我使用的是 SLES 11 SP2 和 SP3 系统

答案1

(请注意,这个答案是在 systemd 之前写的。我还没有检查 systemd 版本的 cron 在这种情况下的行为方式。)

touch /var/spool/cron/crontabs/$username; chmod 0 /var/spool/cron/crontabs/$username应该可以解决问题。使用 和 恢复chmod 600touch您需要更改文件的 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 的现有临时副本,则您没有备份。

相关内容