有没有办法使用Bash / Shell启用和禁用Crontab任务?
因此,当用户启动Server 1时,它将启用Server 1 Crontab行,依此类推。 当用户停止服务器1时,服务器1 Crontab行被禁用(#)。 这可能吗?如何?
提前致谢
*/1 * * * * Server 1 check
*/1 * * * * Server 2 check
*/1 * * * * Server 3 check
答案 0 :(得分:14)
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
答案 1 :(得分:2)
我建议你为每个服务器一个脚本添加你的cron作业到/etc/cron.d
。然后让cron脚本扫描一些标记文件,如果应该执行cron作业。
答案 2 :(得分:0)
这是一个变种,我使用cronjob每晚加载它自己。我只是编辑一个文件,它会在每晚10点重新加载。您可以更频繁地重新加载。我为每个节点保留了一个文件目录。诀窍是确保没有人注释重装线。
0 22 * * * crontab /home/ME/cron_files/NODE
答案 3 :(得分:0)
作为快速而又脏的修复,您可以启用或禁用相应cron脚本的执行权限。
E.g。如果你想阻止定位自动更新其数据库(可能是I / O消耗):
cd /etc/cron.daily
sudo chmod a-x locate
这可能是针对cron框架的,但它很快就会被应用,并且可以在需要时立即使用。