【问题标题】:Monit check fails when I add test for status == 0当我为 status == 0 添加测试时,Monit 检查失败
【发布时间】:2015-11-10 02:30:22
【问题描述】:

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

the site 上对此没有任何记录。是因为存在匹配条件而导致检查失败,还是我弄乱了语法?

【问题讨论】:

    标签: unix monit


    【解决方案1】:

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

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

    【讨论】:

    • 虽然这确实解决了monit status 显示测试失败的问题,但else if succeeded 块仅在检查从失败到成功时才会执行。这对我的目的来说是不够的——我最终不得不为我的每一个监控测试编写一个通用的包装脚本,这样我就可以在每次运行测试时执行两个“记录”脚本的功能。
    • 技术上这回答了我原来的问题,所以我会接受这个答案。
    【解决方案2】:

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

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

    【讨论】:

    • 我的脚本在这两种情况下都返回 0,这可能是诀窍。
    • 好的,开始测试它。您必须澄清您是如何从exit 切换到exit 1。你的意思是在你的第一个脚本中,monit 运行的那个?我这样做了,无论脚本返回什么,monit summary 都会继续显示Status failed。正如我在最初的问题中所说,我的检查正确运行了相应的成功/失败脚本,但检查在monit summary 中仍然显示为失败。哦,是的,所有这些文件都是可执行的并且有 shebangs! :)
    • 是的,我正在切换脚本本身的状态,给它一个不同的退出标志。 exit 1exit 0/exit ,为什么它在日志中显示它仍然失败,老实说,我不知道,不能在我这边重现。 Monit 的版本可能是?
    • 我将此报告为错误,但没有得到回复;如果我得到一个会更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    • 2019-03-04
    • 1970-01-01
    相关资源
    最近更新 更多