メールサーバーを監視するための簡単なスクリプト

メールサーバーを監視するための簡単なスクリプト

私は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

おすすめ記事