我在使用 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 预计触发警报之前删除临时文件来验证这一点。
另一种选择是使用不同的独特事件类型来测试它。