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

Monit check fails when I add test for status == 0

我在 Debian Jessie 上 运行ning 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 上没有关于此的任何记录。是因为有匹配条件导致检查失败,还是我搞砸了语法?

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

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

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

根据 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"