有没有办法使用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框架,但它很快就会被应用,并在需要的情况下工作。