Email
用於監視郵件伺服器的簡單腳本
如果我的郵件伺服器線上並且正在執行,我想使用 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