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

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

我在使用 monit 时遇到了麻烦。我已经使用 monit 设置了监控。但是,我在检查正在运行的进程时遇到了麻烦。如果进程未运行,我想运行一个将创建 pagerduty 警报的特定脚本。

我的 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

脚本有效。我在终端中测试过,运行良好。事件实际上是在 pagerduty 中创建的。但是,即使没有进程正在运行,monit 似乎也没有真正运行它:

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

sudo 监控状态:

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

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

答案1

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

可能的情况是,当您从控制台执行时,您已经创建了一个临时文件。您可以通过在 monit 预计触发警报之前删除临时文件来验证这一点。

另一种选择是使用不同的独特事件类型来测试它。

相关内容