Cronでサービスの死活監視

最近仕事でVPSにWeb、メール(Postfix、Dovecot)、Webメール、メーリングリスト(Mailman)とインストールしたのだが・・・
本番が始まると突然のサービス停止に時々見舞われて、極めて不安定な状態です。
どうもメーリングリストの設定なのか相性なのか、ここが起因になって他のサービスが停止するようです。
ということで、死活監視を行うことになったのですが、今回はCronのみで死活監視を行うことに挑戦しました。
cronの編集は「# vi /etc/crontab」を前提としています。
Webの死活監視
0 * * * * root wget -O – (URL) > /dev/null 2>&1 || echo `date +\%Y/\%m/\%d_\%H:\%M:\%S` > /dev/null | tee -a /var/log/service_watch.log | service httpd restart > /dev/null | tee -a /var/log/service_watch.log
毎時0分に起動します。Wgetコマンドにより(URL)に指定したコンテンツを取得、取得できなかった場合は、ログファイル(/var/log/service_watch.log)に時刻とサービス再起動状態を記録します。「tee」コマンドの「-a」はファイルに追記するオプションです。
smtpの死活監視
1,11,21,31,41,51 * * * * root (sleep 2;echo “quit”) | `telnet 127.0.0.1 25 >& smtp_status`;if [ `grep -c ‘220’ smtp_status` != 1 ]; then service postfix restart; logger -t smtp “crond check – smtp service restart”; fi; > /dev/null 2>&1
1分から10分おきに実行します。quit入力を2秒後にセットし、ローカルの25番ポートに接続します。正常に接続できれば、エコーの中に「220」が入るので、それがない場合は接続できなかったと判断して、Postfixの再起動をします。ログは標準のmessageログに指定したメッセージ(crond check – smtp service restart)で書き込まれます。
pop3の死活監視
2,12,22,32,42,52 * * * * root (sleep 2;echo “quit”) | `telnet 127.0.0.1 110 >& pop3_status`;if [ `grep -c ‘Welcome’ pop3_status` != 1 ]; then service dovecot restart; logger -t pop3 “crond check – dovecot service restart”; fi; > /dev/null 2>&1
2分から10分おきに実行します。quit入力を2行後にセットし、ローカルの110番ポートに接続します。正常に接続できれば、エコーの中に「Welcome」(独自のバナーメッセージ)が入るので、それがない場合に接続できなかったと判断して、Dovecotの再起動をします。ログは標準のmessageログに指定したメッセージ(crond check – dovecot service restart)で書き込まれます。
メーリングリストはサービスが起動していても、キューが詰まる現象があったので、1時間ごとに強制的に再起動させるようにしました。
10 * * * * root service mailman restart > /dev/null 2>&1