我有一个 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 的误杀。