我有一个情况是由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"