用于监控邮件服务器的简单脚本

用于监控邮件服务器的简单脚本

我想使用 bash 脚本(Python 是第二好的)来定期(每小时)监控我的邮件服务器是否在线并运行。

我知道有针对此任务的专用解决方案(Nagios,...),但我确实需要一些简单的东西,可以将其用作 cronjob。只能看到邮件服务器还活着。

我知道如何通过 telnet 与邮件服务器通信,即:

telnet mail.foo.org 25
EHLO example.com
mail from:
rcpt to:
...

但这是互动的。是否可以使用脚本检查邮件服务器正在通信?显然,我不想全程发送电子邮件。我只是想测试邮件服务器是否正在响应。

答案1

您可以nc像这样测试 SMTP 邮件服务器:

$ nc -w 5 mail.mydom.com 25 << EOF
HELO mail.mydom.com
QUIT
EOF

笔记:该选项-w 5指示nc最多等待 5 秒。要监视的服务器就是mail.mydom.com我们25要连接的端口。

如果您发现您的服务器存在以下问题,您也可以使用上述形式HELO

$ echo "QUIT" | nc -w 5 mail.mydom.com 25

笔记:此表单适用于 Postfix 和 Sendmail!

例子

我正在连接到我的邮件服务器。

$ echo "QUIT" | nc -w 5 mail.bubba.net 25
220 bubba.net ESMTP Sendmail 8.14.3/8.14.3; Sat, 19 Apr 2014 16:31:44 -0400
221 2.0.0 bubba.net closing connection
$

如果检查此操作返回的状态:

$ echo $?
0

但是,如果另一端没有任何内容接受我们的连接:

$ echo QUIT | nc -w5 localhost 25
Ncat: Connection refused.
$

检查由此返回的状态:

$ echo $?
1

把它放在一起

这是我的脚本版本,名为mail_chkr.bash.

#!/bin/bash

echo "Checking Mail Server #1"
echo "QUIT" | nc -w 5 mail.bubba.net 25 > /dev/null 2>&1

if [ $? == 0 ]; then
  echo "mail server #1 is UP"
else
  echo "mail server #1 is DOWN"
fi

echo "Checking Mail Server #2"
echo "QUIT" | nc -w 5 localhost 25 > /dev/null 2>&1

if [ $? == 0 ]; then
  echo "mail server #2 is UP"
else
  echo "mail server #2 is DOWN"
fi

运行它:

$ ./mail_chkr.bash 
Checking Mail Server #1
mail server #1 is UP
Checking Mail Server #2
Ncat: Connection refused.
mail server #2 is DOWN

相关内容