このWeb公開サーバー(Pogoplug E02)が、原因不明で時々クラッシュするようです。気付いて再起動すれば復旧しているのですが、それを知ることが出来なくて、ずっとわからないまま長期間の動作不能状態になってしまいます。
対策としては、動作を監視していて検知したらメールを飛ばすことで対応できると考えました。方法としては単純なので対策が簡単に出来ると思っていたのですが、やってみるとなかなか大変で、途中にハードルが沢山隠れています。
検知方法は、(1) ping 、 (2) wget の2種類で試作してみました。
(1) は、一般的な ICMP パケットを 5回送信し、相手からの応答を要求してロスがなければスルーして、ロスがあればメールを送信する方法です。
#!/bin/bash
To='sunao_mita@.....' # To: メール転送先
T='sunao-mita.pgw.jp'
test -z "$1" || T="$1" # T: 監視するサーバー
Su="## Ping Error <$T> ##"
ck=`ping -c 5 $T | grep ' 0% packet loss'`
test -z "$ck" && ( echo "Ping Error <$T>." | mail -s "$Su" "$To" )
exit 0
(2) は、単純にwgetコマンドで、httpリクエストを要求して取り出せれば正常と判断し、取り出せなければメールを送信する方法です。キャシュに残るデータで正常と判断されて検出できないことが有りそうで少し心配です。
#!/bin/bash
To='sunao_mita@.....'
T='sunao-mita.pgw.jp'
test -z "$1" || T="$1"
Su="## HTTP Error http://$T/ ##"
`wget -q -O- http://$T/ >/dev/null`
test "$?" -ne 0 && ( echo "HTTP Error http://$T/" | mail -s "$Su" "$To" )
exit 0
実際にテストしてみるとメールが届かない、なぜ…
監視しているサーバーの postfix が、単純に監視される公開サーバーへエラーメールをリレーしているので、監視されるサーバーが異常となって、エラーメールが生成されてもリレーの機能も異常なわけで、メールが転送できずに届かないといった問題がありました。
昔は単純に@niftyのメールサーバーに転送すれば機能したのですが、スパムメールを大量に送りつける悪い人が多くなりいつの頃からかパスワードでの認証が必要になってしまいました。
正常にメールを送信できる公開サーバーの設定 /etc/postfix/main.cf を参考にして、監視サーバーからも生成したエラーメールを直接 @niftyにリレーできるように設定しました。
公開サーバーのLANケーブルを抜いてテストしてみます。