当我为状态==0添加测试时,Monit检查失败



我正在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正在运行。

网站上没有任何关于这件事的记录。检查失败是因为存在匹配条件,还是我把语法搞砸了?

虽然这是一篇旧帖子,但我刚刚遇到了同样的问题,如果能找到解决方案会很有帮助。

根据服务测试通用语法,检查程序测试的正确结构应该是

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"

我用下面的脚本和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

  • 我会尝试调试您的脚本返回的状态
  • 我会检查所有这些文件是否都是可执行的

最新更新