我想尝试用monit监视postfix队列。我从Stackoverflow的人那里得到了一个例子。我的monit版本是最新的
这是Monit版本5.10
在/etc/monit.d
我postfixlocal
与
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
我真的不知道这里有什么问题,有什么想法吗?
答案 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会提醒您。