Email

用於監視郵件伺服器的簡單腳本

  • March 18, 2019

如果我的郵件伺服器線上並且正在執行,我想使用 bash 腳本(python 將是第二好的)定期(每小時)監視。

我知道這個任務有專門的解決方案(Nagios,…),但我真的需要一些簡單的東西,可以用作 cronjob。只看到郵件伺服器還活著。

我知道如何使用 telnet 與郵件伺服器交談,即:

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

但這是互動式的。是否可以檢查郵件伺服器正在通信的腳本?顯然,我不想一路走來實際發送電子郵件。我只想測試郵件伺服器是否響應。

您可以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

引用自:https://unix.stackexchange.com/questions/125557