3月 30 2008

[apache] 監視スクリプト作成

Posted by (っ´∀`)っ ゃー in apache, CentOS, linux, やってみた, メモ
このエントリーをはてなブックマークに追加
はてなブックマーク - [apache] 監視スクリプト作成
Share on Facebook
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip
Share on FriendFeed
[apache] 監視スクリプト作成(っ´∀`)っ ゃー

これからしばらく家をあけるので、apacheのプロセス監視をどうしようかと考えていたのです。
数日はネットに繋がる環境にいられないけど、せめてapacheのダウンと復旧くらいは把握したいなー・・・
というのと、落ちっぱなしのときにずーっとメールがくるのはウザいなー・・・という思いから、以下の要件で監視スクリプトを作りました。

1. apacheのプロセスが落ちたら2回まで通知。3回目以降は無視。
2. apacheのプロセスが復旧したら通知(どれだけ落ちていたかは問わない)。
3. 無論、何もなければ通知しない。

なお、今回apacheを立ち上げなおすのは要件として含めていません。
監視スクリプトはcronで定期的に起動し、1回落ちたのか、2回以上連続して落ちているのかは、
カウントファイルを生成して数えることにします。また、apacheが復旧したら、カウントファイルは削除します。

$ touch watcher_httpd.sh
$ chmod 755 watcher_httpd.sh

$ vi watcher_httpd.sh
#!/bin/sh

ADMIN=【携帯のメールアドレス】
APID=”/usr/sbin/httpd”

# フラグファイルを格納するディレクトリがなければ作成する
if [ ! -d "dat" ];
        then
                mkdir dat
fi

# httpdの親プロセスをつかまえる
if [ 1 -eq `ps auxwww | grep $APID | grep ^root | wc -l` ];
        # httpdが生きているときの処理
        then
        # httpdが2回以上落ちてから復旧したときの処理
        if [ -f "dat/count1_httpd" ];
                then
                # httpd復旧アラートメールを飛ばし、カウントファイルをすべて削除する
                echo $(date)$’\n”httpd is Allived Again’ | mail -s “$APID is Allived Again” $ADMIN
                rm -f dat/count*_httpd
        else
        # httpdが1回だけ落ちてから復旧したときの処理
        if [ -f "dat/count0_httpd" ];
                then
                echo $(date)$’\n”httpd is Allived Again’ | mail -s “$APID is Allived Again” $ADMIN
                rm -f dat/count0_httpd
                else
                :
        fi
        fi

        # httpdが落ちたときの処理
        else
        if [ ! -f "dat/count0_httpd" ];
                # はじめてhttpdが落ちたときの処理
                then
                echo $(date)$’\n”httpd is FAILED’ | mail -s “$APID is FAILED” $ADMIN
                touch dat/count0_httpd
                # 2回目の通知処理
                else
                if [ ! -f "dat/count1_httpd" ];
                then
                echo $(date)$’\n”httpd is FAILED Again!!!’ | mail -s “$APID is FAILED Again!!!” $ADMIN
                touch dat/count1_httpd
                fi
        fi
fi

ここまで書いたら保存し、試験します。試験項目は以下の通りです。

1. apacheが動いている状態でこのスクリプトを実行し、警告メールも復旧メールも飛ばないこと。
2. apacheを落とした状態でこのスクリプトを実行し、1回目の警告メール(メール件名/本文に注目)が飛ぶこと。
3. apacheを上げてからこのスクリプトを実行し、復旧メールが飛ぶこと。
4. apacheを落とした状態でこのスクリプトを2回実行し、1回目の警告メールと2回目の警告メールが飛ぶこと。
5. さらにもう1回このスクリプトを実行し、警告メールも復旧メールも飛ばないこと。
6. apacheを上げてからこのスクリプトを実行し、復旧メールが飛ぶこと。
7. 再度apacheが上がっていることを確認し、このスクリプトを実行して警告メールも復旧メールも飛ばないこと。

以上です。