如何使用monit来确保只有一个进程实例正在运行

我有ruby守护进程运行。 有一段时间,我们会无意中启动它的第二个实例,这会导致竞争条件。

我可以使用Monit检测是否有多个“my_ruby_daemon”实例在运行? 如果是这样,杀死额外的实例?

我不知道你是否可以用monit来做到这一点,但是我认为它是一个错误的解决scheme ,可能会带来它自己的问题(尤其是如果你杀死了“错误的”守护进程(?))。

正确的解决scheme是让你的守护进程创build并检查一个锁(PID文件对此非常mydaemon.pid – 如果mydaemon.pid存在并且其中的PID存活拒绝启动守护进程)。
有几个ruby锁文件gem/库/等可用( 像这样 )。
如果修改守护进程几乎不存在,几乎每个Unix系统都带有lockfile命令或类似的东西 – 将守护进程包装在一个shell脚本中,在尝试启动之前创build/检查锁。

如果你把lock文件放在重启时清除的地方( /tmp/var/run等),这样可以帮助你的系统崩溃,当它的init脚本运行的时候会重启。