在重启进程失败时执行自定义监控脚本

我有一个情况是由monit监视的某些进程正在生成空的PID文件。 Monit在处理空文件方面不太好,即使在进程已经运行的时候也试图重启进程,并且在monit日志中不断抛出错误。

我正在考虑实施一个自定义脚本来处理这个问题,当monit看到一个PID文件,使用它时,它无法重新启动该进程,运行这个自定义脚本,并用已经运行的进程的PID重新填充PID文件。

我没有写“如果失败”的部分来运行这个自定义脚本。如果它是一些服务器进程的端口和协议,我可以写一个,但只是一个后台进程,我不知道如何处理这种情况

预期的Monitconfiguration,但无法编译时运行“monit -t”

请帮助build议正确的configuration来处理监视重启失败。

谢谢。

 #检查cmaeventd进程
用pidfile /var/run/cmaeventd.pid检查进程cmaeventd
组snmp-agents
 start program =“/ opt / hp / hp-snmp-agents / storage / etc / cmaeventd start”
 stop program =“/ opt / hp / hp-snmp-agents / storage / etc / cmaeventd stop”
如果失败(重新启动),然后执行“/tmp/pidchk.sh cmaeventd”
如果2在3个周期内重新启动,则超时

Monit日志文件:


 [PST Feb 3 18:18:20] error:monit:从文件'/var/run/cmaidad.pid'读取pid错误
 [PST Feb 3 18:18:21] error:monit:从文件'/var/run/cmaidad.pid'读取pid错误
 [PST Feb 3 18:18:22]错误:'cmaidad'未能启动

 [PST Feb 3 18:19:22] error:'cmaidad'服务在2个周期内重新启动2次 -  unmonitor


清空PID文件:
 logbash-3.1#ps -ef | grep cmaidad | grep -v grep
根32298 1 0 18:14?  00:00:01 cmaidad -p 15 -s OK -l /var/log/hp-snmp-agents/cma.log
 logbash-3.1#cat /var/run/cmaidad.pid

 logbash-3.1#ls -l /var/run/cmaidad.pid
 -rw-r  -  r-- 1 root root 1 2月3日18:14 /var/run/cmaidad.pid

我写的脚本来填充PID文件,如果给定的进程正在运行。

 #!/斌/庆典
 #重新填充未被hp-snmp脚本填充的空PID文件
 AGNTFILEPATH = / var / run中

 #不同的发行公司把pidof放在不同的地方
如果[-f / sbin / pidof]; 然后
  的pidof = / sbin目录/的pidof
 elif [-f / bin / pidof]; 然后
  的pidof = /斌/的pidof
科幻

 #添加到代理文件中
 addpidintofile(){
                 PIDOFAGNT =`$ PIDOF -o $$ -o $ PPID -o%PPID -x $ PNAME> / dev / stdout | 剪下-d“”-f1` 2> / dev / null
                如果[-f $ AGNTFILEPATH / $ PNAME.pid]; 然后
                         echo“$ PIDOFAGNT”> $ AGNTFILEPATH / $ PNAME.pid
                科幻
 }

 PNAME = $ 1
 cnt =`ps -ef | grep $ PNAME | grep -v grep | wc -l`
如果[cnt == 0]
    然后
    出口1;
其他 
     addpidintofile
    退出0;
科幻

对于您正在尝试解决的问题,这是一个非常糟糕的方法。 您确实希望您的HP监控代理/驱动程序稳定并且不会崩溃 。

无论哪种方式,如果您不打算解决根本问题,您可以指示Monit 使用进程名称而不是PID 。

check process cmaeventd matching "cmaeventd" start program = "/etc/init.d/cmaeventd start" stop program = "/etc/init.d/cmaeventd stop"