监控重启进程行为

监控重启进程行为

Monit 的文档对重启操作进行了如下说明:

RESTART 重新启动服务并发送警报。重新启动是通过调用服务注册的 restart 方法执行的,如果未设置 restart,则先调用 stop 方法,然后调用 start 方法。

我正在监控一些进程,最近发现即使没有设置重启方法,也不会调用停止方法。配置如下:

check process myProcess matching "myProcess"
    start program = "/etc/init.d/myProcess start"
    stop program = "/etc/init.d/myProcess stop"
    if not exist then restart

它昨天崩溃了,日志显示:

[CET Nov  9 12:30:36] error    : 'myProcess' process is not running
[CET Nov  9 12:30:36] info     : 'myProcess' trying to restart
[CET Nov  9 12:30:36] info     : 'myProcess' start: '/etc/init.d/myProcess start'
[CET Nov  9 12:30:36] debug    : Starting myProcess ...
myProcess is already running ... //The output of the init.d script. The process does not start since the PID file was not deleted by the stop method
[CET Nov  9 12:31:06] error    : 'myProcess' failed to start (exit status 0) -- '/etc/init.d/myProcess start': Starting myProcess ...
myProcess is already running ...

Monit 调用 start 方法,但该方法失败,因为 init.d 脚本会查找自进程崩溃以来未被删除的 PID 文件。但是,根据文档,Monit 应该首先调用 stop 方法(在我的情况下,该方法将删除 PID 文件),然后调用 start 方法。

有没有办法在 Monit 中实现这种行为,或者我应该修改所有 init.d 脚本?

答案1

Monit 未找到该进程,因此只能使用 start 来重新启动该进程。您可以使用 pidfile 进行检查。

更多信息请访问https://mmonit.com/monit/documentation/monit.html#Process

文档在开头指出:

如果进程未运行,Monit 可以启动它;如果进程未响应,Monit 可以重新启动它;如果进程使用了​​过多资源,Monit 可以停止它。

你可以从字里行间看出,如果一个进程似乎没有运行,它就不会被停止。

要获取更多附加信息,您可以使用“monit -vv”或“monit -vv -I”启动 Monit。

答案2

我找到了一个解决方法。作为重启命令,我手动停止并启动该进程:

check process myProcess matching "myProcess"
    start program = "/etc/init.d/myProcess start"
    stop program = "/etc/init.d/myProcess stop"
    restart program = "/bin/bash -c '/etc/init.d/myProcess stop && /etc/init.d/myProcess start'"
    if not exist then restart

相关内容