我希望 monit 监控我的服务,一旦它停止,我希望计算机重新启动。该进程没有我可以监控的特定端口。这是我所做的:
check process chat with pidfile /var/run/chat.pid
start program = "/etc/init.d/chat start"
stop program = "/etc/init.d/chat stop"
if changed ppid then exec /sbin/reboot
我尝试了各种方法但只是重新启动了我的服务。
有什么建议吗?
答案1
我认为 ppid 可能指的是父 id,对于服务来说它永远是 1,所以使用
check process chat with pidfile /var/run/chat.pid
start program = "/etc/init.d/chat start"
stop program = "/etc/init.d/chat stop"
if changed pid then exec /sbin/reboot
相反。我用一些本地服务测试了这个,它对我来说是有效的,重新启动服务会导致服务器重新启动。(这是否是个好主意通常是另一回事... ;-)
来自手册页....
PID 测试
Monit 可以测试进程的进程标识号 (pid) 是否发生变化。此测试是隐式的,默认情况下,Monit 会在失败时发出警报。
pid 语句的语法是:IF CHANGED PID [[] CYCLES ] THEN action 可以选择“ ALERT ”、“ RESTART ”、“ START ”、“ STOP ”、“ EXEC ”、“ MONITOR ”或“ UNMONITOR ”。
此测试可用于检测在两个 Monit 测试周期之间的时间段内可能发生的进程重启。如果重启速度很快且进程提供预期的服务(即所有测试均成功),您将收到进程已被替换的通知。
例如,sshd 守护进程可以非常快速地重新启动,因此如果有人更改其配置并在 Monit 控制之外执行 sshd restart,您将收到通知,告知该进程已被新实例替换(或者您可以选择执行其他操作,例如预防性停止 sshd)。
另一个例子是 MySQL Cluster,它有自己的看门狗,具有进程重启功能。您可以使用 Monit 进行冗余监控。
例子:
使用 pidfile /var/run/sshd.pid 检查 sshd 进程,如果 pid 发生变化,则执行“/my/script”
PPID 测试
Monit 可以测试进程的父进程标识号 (ppid) 是否发生变化。此测试是隐式的,默认情况下,Monit 会在失败时发出警报。
ppid 语句的语法是:IF CHANGED PPID [[] CYCLES ] THEN action 可以选择“ ALERT ”、“ RESTART ”、“ START ”、“ STOP ”、“ EXEC ”、“ MONITOR ”或“ UNMONITOR ”。
此测试对于检测父进程的变化很有用。
例子:
使用 pidfile /var/run/myproc.pid 检查进程 myproc,如果 ppid 发生变化,则执行“/my/script”
答案2
从外部监视任意进程非常困难;相反,控制您启动的进程却很容易。
我建议你调查一下运行,服务器的替代初始化守护进程。