【问题标题】:Enable/Disable tasks in Crontab by Bash/Shell通过 Bash/Shell 在 Crontab 中启用/禁用任务
【发布时间】:2012-12-10 06:27:19
【问题描述】:

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

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

提前致谢

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

【问题讨论】:

  • 您可以使用所有脚本使用的哨兵目录,并在每个脚本中检查他们期望的哨兵是否在这里 - 如果没有,则中止执行

标签: linux bash shell crontab


【解决方案1】:
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

【讨论】:

  • 似乎没有在 crontab 中添加/删除 # 。 On = */1 * * * * Server 1 check Off = #*/1 * * * * Server 1 check
  • Wonderfull,这行得通,我面临的唯一问题是在 Bash 中使服务器编号动态化,问题是 #.*Server $1 check/ 不起作用,要么“$ 1”。那么如何将变量 $1 传递给 Numbers 呢?
  • 查看修改后的命令。注意从单引号到双引号的变化,这样变量就会被扩展。
  • 感谢您完成了这项工作,我仍然不明白为什么需要报价,以及重新定义 1 美元。无论如何,非常感谢!
  • 引号是必需的,因为 sed 要求命令是单个参数。
【解决方案2】:

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

【讨论】:

  • 另一种常见的安排是有一个目录/path/to/servers,然后只是一个带有run-parts /path/to/servers 的cron 作业。然后禁用服务器以重命名或删除其在servers 目录中的文件。 (run-parts 是特定于 Debian 的,但如果您的平台缺少它,那么推出您自己的也不难。)
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

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

    cd /etc/cron.daily
    
    sudo chmod a-x locate
    

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

    【讨论】:

      猜你喜欢
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 2013-04-07
      • 2013-11-05
      • 2013-11-25
      • 2018-08-01
      • 1970-01-01
      相关资源
      最近更新 更多