
私はbashスクリプト(Pythonが2番目に良い)を使って私のメールサーバーがオンラインで実行されているか定期的に(毎時間)監視したいと思います。
これには専用のソリューション(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
メモ:このオプションは最大5秒間待つように-w 5
指示します。nc
監視するサーバーは、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