我必须monit
监控一个进程,但它没有意识到它已经停止运行。我的监控配置如下:
check process xxx with pidfile /var/run/xxx.pid
group yyy
start program = "/etc/init.d/xxx start"
stop program = "/etc/init.d/xxx stop"
if failed host 127.0.0.1 port 9999 then restart
if 5 restarts within 5 cycles then timeout
问题是,即使我的进程崩溃了,PID 文件仍然存在。所以...PID 存在,但 localhost 中的端口 9999 应该会失败。所以...monit 不应该重新启动此进程吗?一定要删除 pid 文件吗?不能做那种事吗OR
?
提前致谢,
答案1
如果我错了请纠正我:
- 如果程序崩溃,PID 文件保留,但端口 9999 被关闭
- 如果程序正常停止,PID 文件将被删除,端口 9999 将被关闭
常见行为与端口 9999 有关。你可以使用类似下面的方法监视它:
check host 127.0.0.1 with address 127.0.0.1
start program = "/etc/init.d/xxx restart"
stop program = "/etc/init.d/xxx stop"
if failed port 9999 then restart
OR
以上内容应该足以涵盖所有情况,但您可以将其作为附加声明添加到现有声明中(这将是您正在讨论的类型)。
看看关于检查主机的文档。
附言:
我认为,关于文档(有关 Apache 的示例),即使 PID 文件仍然存在,如果端口 9999 无法访问,您的配置也应该能够重新启动您的进程。我猜是端口 9999 未关闭,或者端口 9999 未在 127.0.0.1 上监听(请使用 检查所有这些netstat
)。
因此,在您的配置中,尝试用以下命令替换端口监视行:
if failed port 9999 then restart
(删除host 127.0.0.1
)。