我在Debian Jessie上运行M / Monit 5.14。我有这样的支票:
check program myscript with path "/etc/monit/scripts/test.sh"
if status != 0 then exec "/etc/monit/scripts/record_failure.sh"
if status == 0 then exec "/etc/monit/scripts/record_success.sh"
这个想法是这些record
脚本每次运行时都会发送该测试结果的记录。当然,还有其他方法可以做到这一点,但这只是我在这种情况下采取的一条特定路线。我更关注添加status == 0
行使monit检查始终失败的事实,即使monit status
中的最后一个结果是0
和record_success.sh
是正在运行。
在the site上记录的内容没有任何内容。它是否因为存在匹配条件而未通过检查,或者我是否弄乱了语法?
答案 0 :(得分:3)
虽然这是一篇旧文章,但我刚刚遇到了同样的问题,找到解决方案会有所帮助。
根据Serivce Testing General Syntax,检查程序的正确结构应该是
IF <test> THEN <action> [ELSE IF SUCCEEDED THEN <action>]
正如您所看到的,成功案例(按惯例为0)应由succeeded
关键字指定。
在这种情况下,以下更改应该让它感到高兴:
check program myscript with path "/etc/monit/scripts/test.sh"
if status != 0 then exec "/etc/monit/scripts/record_failure.sh"
else if succeeded then exec "/etc/monit/scripts/record_success.sh"
答案 1 :(得分:0)
我使用以下脚本和Monit配置对我进行了一个小测试,根据最后一个命令返回退出状态,并拖尾/var/log/tester.log
#!/bin/bash
echo "This is a test" >> /var/log/tester.log
exit
失败:
#!/bin/bash
echo "failure in this case" >> /var/log/tester.log
成功:
#!/bin/bash
echo "success in this case" >> /var/log/tester.log
从exit
切换到exit 1
时,状态正在切换,没有任何问题。 Monit version 5.6