监控程序返回“无输出”

时间:2014-12-09 10:15:17

标签: monit

我想尝试用monit监视postfix队列。我从Stackoverflow的人那里得到了一个例子。我的monit版本是最新的

这是Monit版本5.10

/etc/monit.dpostfixlocal

check program postfixcola with path "/usr/local/bin/postfixcola.sh"
    #if status != 0 then alert
    if status > 1 then alert

然后在/usr/local/bin/我{/ 1}}

postfixcola.sh

但Monit每次都会抱怨脚本的输出。我在#!/bin/sh QUEUE=`/usr/sbin/postqueue -p | tail -n1 | awk '{print $5}'` exit $QUEUE 之前进行了测试,设置和回显,并且在测试时它返回1(因为后缀的队列是1)

但错误依然存在:exit

我真的不知道这里有什么问题,有什么想法吗?

2 个答案:

答案 0 :(得分:0)

在bash脚本中,您应该将消息回显到/ dev / stderr:

#!/bin/bash
QUEUE=`/usr/sbin/postqueue -p | tail -n1 | awk '{print $5}'`
if [ $QUEUE -ne 0 ] ; then
   echo "Queue length > $QUEUE" > /dev/stderr
fi
exit $QUEUE

答案 1 :(得分:0)

这个问题的第一个答案对我有很大帮助,自定义的Monit bash脚本(程序)应该在 / dev / stderr 中回显一条消息。

但是根据我的经验,如果脚本的退出代码发生更改,Monit只会警告您,因此您必须在自定义脚本中设置阈值。

在我的情况下,我使用的是 nf_conntrack_count ,但是对于 postqueue ,它将非常相似。

/etc/monit/conf.d/server

check program postfixcola with path "/bin/bash -c /usr/local/bin/postfixcola.sh"
    if status > 0 then alert

/usr/local/bin/postfixcola.sh

#!/bin/sh
QUEUE=`/usr/sbin/postqueue -p | tail -n1 | awk '{print $5}'`

echo $QUEUE > /dev/stderr
if [ $QUEUE -gt 1000 ] ; then
   exit 1
fi

exit

监控命令监控状态postfixcola 输出应如下所示:

Program 'postfixcola'
  status                       Status ok
  monitoring status            Monitored
  monitoring mode              active
  on reboot                    start
  last exit value              0
  last output                  675
  data collected               Sat, 29 Sep 2018 17:22:36

最后一个输出中,您可以看到值,并且在最后一个退出值中为0。因此,如果您的自定义脚本在队列中达到1000个电子邮件的阈值,则退出代码将更改为1, Monit会提醒您。