[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/bash

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が上がっていることを確認し、このスクリプトを実行して警告メールも復旧メールも飛ばないこと。

以上です。