我有一个 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 运行该特定命令。