13

有没有办法使用 Bash/Shell 启用和禁用 Crontab 任务?

因此,当用户启动 Server 1 时,它将启用 Server 1 的 Crontab 行,依此类推。当用户停止服务器 1 时,服务器 1 的 Crontab 行将被禁用 (#)。这可能吗?如何?

提前致谢

*/1 * * * * Server 1 check
*/1 * * * * Server 2 check
*/1 * * * * Server 3 check
4

4 回答 4

20
SERVERNUM=$1

启用:

crontab -l | sed "/^#.*Server $SERVERNUM check/s/^#//" | crontab -

要禁用:

crontab -l | sed "/^[^#].*Server $SERVERNUM check/s/^/#/" | crontab -

成绩单:

barmar@dev$ crontab -l
*/1 * * * * Server 1 check
*/1 * * * * Server 2 check
*/1 * * * * Server 3 check
barmar@dev$ crontab -l | sed '/^[^#].*Server 1 check/s/^/#/' | crontab -
barmar@dev$ crontab -l
#*/1 * * * * Server 1 check
*/1 * * * * Server 2 check
*/1 * * * * Server 3 check
barmar@dev$ crontab -l | sed '/^#.*Server 1 check/s/^#//' | crontab -
barmar@dev$ crontab -l
*/1 * * * * Server 1 check
*/1 * * * * Server 2 check
*/1 * * * * Server 3 check
于 2012-12-23T12:53:43.830 回答
2

我建议您将您的 cron 作业添加到/etc/cron.d每个服务器的一个脚本中。如果应该执行 cron 作业,然后让 cron 脚本扫描一些标记文件。

于 2012-12-23T13:00:34.307 回答
1

作为一个快速而肮脏的修复,您可以启用或禁用相应 cron 脚本的执行权限。

例如,如果您想阻止 locate 自动更新其数据库(这可能会消耗 I/O):

cd /etc/cron.daily

sudo chmod a-x locate

这可能违反了 cron 框架,但它可以快速应用,并且可以在紧急需要的情况下工作。

于 2017-07-22T12:46:58.803 回答
0

这是一个变体,我使用一个每天晚上自行加载的 cronjob。我只是编辑一个文件,它会在每晚 10 点重新加载。您可以使重新加载更频繁地发生。我为每个节点保留一个文件目录。诀窍是确保没有人注释掉重新加载行。

0 22 * * * crontab /home/ME/cron_files/NODE
于 2012-12-23T13:22:35.983 回答