Monit:在满足服务测试操作条件后延迟下一个监视周期

时间:2011-05-23 18:16:15

标签: apache monit

当我的服务器进入高负载状态时,Apache的正常重启似乎可以让事情重新得到控制。所以我用这个配置设置了monit:

set daemon 10
check system localhost
      if loadavg (1min) > 5 then exec "/etc/init.d/apache2 graceful"

所以每隔10秒,我会轮询服务器负载,当它超过5时,我会优雅地重启Apache。然而,这暂时增加了负荷,所以我们陷入死亡螺旋。我想要的是它在10秒后注意到负载是5或更多,然后正常重启Apache,然后等待 5分钟左右再次检查特定指标。

有没有办法用monit做到这一点?

2 个答案:

答案 0 :(得分:2)

它并不完全在监狱内,但它足够接近

set daemon 10
check system localhost
  if loadavg (1min) > 5 then unmonitor
  if loadavg (1min) > 5 then exec "/etc/init.d/apache2 graceful"
  if loadavg (1min) > 5 then exec "python /scripts/remonitor.py"

然后你有一个python脚本,如下所示:

import time, os

time.sleep(5*60)
os.system("monit monitor system")

所以这将:
1.当负载过大时,监控“系统”,防止死亡螺旋 2.优雅地重启apache
3.启动将在5分钟内重新监视“系统”的脚本

答案 1 :(得分:0)

set daemon 10

set limits { programtimeout: 300 seconds }

check system localhost
   if loadavg (1min) > 5 then exec "/bin/sh -c '/etc/init.d/apache2 graceful && sleep 5m'"

甚至

set daemon 10

check system localhost
   start program = "/bin/sh -c '/etc/init.d/apache2 graceful && sleep 5m'" with timeout 330 seconds
   if loadavg (1min) > 5 then start

即,只需在命令后添加sleep 5m shell命令以重新启动Apache并将适当的超时添加到monitrc。