有没有办法使用 Bash/Shell 启用和禁用 Crontab 任务?
因此,当用户启动 Server 1 时,它将启用 Server 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 脚本扫描一些标记文件。
作为一个快速而肮脏的修复,您可以启用或禁用相应 cron 脚本的执行权限。
例如,如果您想阻止 locate 自动更新其数据库(这可能会消耗 I/O):
cd /etc/cron.daily
sudo chmod a-x locate
这可能违反了 cron 框架,但它可以快速应用,并且可以在紧急需要的情况下工作。
这是一个变体,我使用一个每天晚上自行加载的 cronjob。我只是编辑一个文件,它会在每晚 10 点重新加载。您可以使重新加载更频繁地发生。我为每个节点保留一个文件目录。诀窍是确保没有人注释掉重新加载行。
0 22 * * * crontab /home/ME/cron_files/NODE