Monit — 对非守护进程进行守护?

Monit — 对非守护进程进行守护?

我有一个 ruby​​ 进程,它不作为守护进程运行(它在前台运行),但可以生成 pid 文件。我的问题是 Monit 是否总是期望监视后台/守护进程?

我以前使用过 Bluepill,这是默认行为:

请注意,由于我们指定了 PID 文件和启动命令,bluepill 假定该进程将自行守护。如果我们希望 bluepill 为我们将其守护,我们可以这样做(请注意,我们仍然需要指定 PID 文件):process.daemonize = true

monit 有类似的东西吗?据我所知,只要进程(无论是否是守护进程)可以创建 PID 文件,Monit 就会检测它是否将自身作为守护进程,并且不会将其作为守护进程,反之亦然……

谢谢

答案1

它可以很好地用于 monit。你可以让它检查进程的 pid 文件,基本上 monit 正在做的是

ps aux | grep pid#

如果存在,则认为进程已启动并正在运行。如果你没有 pid 文件,也可以通过类似以下方式检查进程

check process myprocessname
    matching "myprocessname"

这基本上

ps aux | grep myprocessname

答案2

简单的方法是将非守护进程去守护。即创建 shell 脚本:

#!/bin/sh
/usr/local/bin/your_program < /dev/null &

然后将该脚本用作守护进程运行。它将在后台启动您的程序(将创建 PID 文件),然后立即返回控制权,从而避免超时和 monit 的误杀。

相关内容