如何使 Monit“检查过程”有条件?

如何使 Monit“检查过程”有条件?

我有一个 monit 脚本,它执行如下操作:

check process sidekiq_1 with pidfile /tmp/pids/sidekiq_1.pid
 start program = "/bin/bash -l -c 'bundle exec sidekiq start" as uid jim and gid jim with timeout 250 seconds
 stop program = "/bin/bash -l -c 'bundle exec sidekiq stop" as uid jim and gid jim with timeout 120 seconds
 if cpu usage > 25% for 18 cycles then restart
 if mem > 1500.0 MB for 18 cycles then restart

这很好,但是我需要根据触发文件的存在来进行条件检查,如下所示:

仅当文件 /tmp/do_not_start_sidekiq.txt 不存在时才执行检查(启动进程)。

这样,touch /tmp/do_not_start_sidekiq.txt如果我想关闭进程并且不让 monit 重新启动它们,我可以这样做,直到我执行rm /tmp/do_not_start_sidekiq.txt

我该如何改变这个监控脚本来实现这个行为?

答案1

正确的使用 monit 处理此问题的方法是“取消监控”该过程......

一个例子:

monit unmonitor sidekiq_1

不会尝试重新启动或报告流程问题。

您可以使用以下方式恢复检查监控:

monit monitor sidekiq_1

这些也可以通过 cron 分组或启动。良好的实际部署可能在工作时间内监控应用程序,在停机时间窗口期间不监控应用程序,由 cron 控制...

################################################################################
# Shutdown Cucumber
################################################################################
01  15 * * 1-5 monit unmonitor `/bin/hostname`
50  23 * * 0-5 monit -g servers stop all
51  23 * * 0-5 monit -g base  stop all
52  23 * * 0-5 monit stop all

编辑:

如果您需要非特权用户能够控制此行为,则可以利用命令/etc/sudoers的条目monit unmonitor/monitor

就像是:

jim ALL=NOPASSWD: /usr/bin/monit unmonitor sidekiq_1

将允许您的非特权用户 jim 运行该特定命令。

相关内容