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

时间:2015-11-10 02:30:23

标签: unix 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中的最后一个结果是0record_success.sh是正在运行。

the site上记录的内容没有任何内容。它是否因为存在匹配条件而未通过检查,或者我是否弄乱了语法?

2 个答案:

答案 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

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