monit在“如果不存在”检查后不运行脚本

我遇到了monit问题。 我已经设置监控monit。 不过,我在检查运行的进程时遇到了麻烦。 如果进程没有运行,我想运行一个特定的脚本,将创buildpagerduty警报。

我的Monit文件看起来像这样:

check process "myapp" matching "myapp" start program = "/usr/local/myapp start" stop program = "/usr/local/myapp stop" if does not exist then exec "/bin/bash pagerduty_script 'MyApp Down' trigger" 

pagerduty_script只是一个包含两个参数"string event"和动作trigger的包装器

脚本起作用。 我已经在terminaltesting,它运行良好。 事件实际上是在pagerduty中创build的。 但是,即使没有进程正在运行,它似乎并不像monit实际运行它:

 ps -ef | grep myapp vagrant 23950 23136 0 17:40 pts/0 00:00:00 grep --color=auto myapp 

sudo monit状态:

 Process 'myapp' status Execution failed monitoring status Monitored data collected Tue, 16 Sep 2014 17:40:11 

我不明白为什么它在控制台上工作,但monit实际上并没有生成事件。 任何帮助将不胜感激!

我一直面临类似的问题,我发现pagerduty脚本为触发器创build了一个临时文件,如果这个文件被修改不超过4个小时,它不会重新触发警报。

可能是从控制台执行的情况下,您已经创build了一个临时文件。 您可以通过在monit预期触发警报之前删除临时文件来validation此情况。

另一种select是使用不同的唯一事件types来进行testing。