通过Bash / Shell在Crontab中启用/禁用任务

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

所以当用户启动服务器1时,它将启用服务器1 Crontab线等等。 当用户停止服务器1时,服务器1 Crontab行被禁用(#)。 这是可能的和如何?

提前致谢

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

 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 

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

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

 0 22 * * * crontab /home/ME/cron_files/NODE 

作为一个快速和脏的修复,您可以启用或禁用适当的cron脚本的执行权限。

例如,如果您想防止定位自动更新其数据库(可能是I / O消耗):

 cd /etc/cron.daily sudo chmod ax locate 

这可能违背了cron框架,但它很快就会被应用,并在需要的情况下工作。