如何暂时禁用用户的 cronjobs?

Din*_*esh 17 cron

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

我在 SLES 11 SP2 和 SP3 系统上

Gil*_*il' 11

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.


小智 9

像这样禁用用户 crontab 怎么样:

crontab -l -u [username] >/tmp/[username].cron.tmp
crontab -r -u [username]
Run Code Online (Sandbox Code Playgroud)

并重新启用:

crontab -u [username] /tmp/[username].cron.tmp
Run Code Online (Sandbox Code Playgroud)

这有一个额外的好处,你可以在不需要 root 的情况下以该用户身份运行它(只需去掉 -u 参数)。

  • 请记住,“/tmp”是[定期清除](https://serverfault.com/a/377349/508737),并且墨菲定律规定它*将*在重新启用命令之前约 10 秒被清除;-) (8认同)

小智 9

如果您只想cron完全停止所有作业一段时间——例如,在进行系统维护时,它们可能会与之产生不良交互——命令通常如下:

sudo systemctl stop crond.service
Run Code Online (Sandbox Code Playgroud)

并且,恢复

sudo systemctl start crond.service
Run Code Online (Sandbox Code Playgroud)

但请注意,某些系统使用cron.service而不是crond.service; 您可以通过以下方式了解它:

sudo systemctl stop crond.service
Run Code Online (Sandbox Code Playgroud)

对于提出的具体问题来说有点过分了,但提供了“一站式购物”,并且不需要使用文件系统或临时文件。也适用于具有单个用户帐户的小型嵌入式系统(Raspberry Pi、Beagle Bone 等)。

  • 由于这会禁用所有用户的 cron,因此它并不能真正回答问题。 (4认同)
  • @Scott:OP 的问题指出“一个或多个用户”。这种方法对于小型嵌入式系统非常有用。恕我直言,它不值得投反对票。 (2认同)