apacheを監視して、落ちてたら起動のsh

ブログ | 2010/5/6 22:40
昨夜、予期せずapacheが落ちるという事態があったので、そんなのを仕込んどいてみる。

apacheCheck.sh
#!/bin/sh

pids=`ps ax | grep apacheCheck.sh | grep -v grep | awk '{print $1}'`
#echo $pids

i=0
for pid in ${pids[*]}
do
 i=`expr $i + 1`
done

if [ $i -le 2 ]; then
 while true
 do
   isAlive=`ps -ef | grep httpd | grep -v grep | wc -l`
   #echo $isAlive
   if [ $isAlive -eq 0 ]; then
     echo `date "+%Y/%m/%d-%H:%M:%S"` apache is down!!!!!
     /opt/local/apache2/bin/apachectl graceful
     
     ADDRESS="メール@アドレスだよ"
     SUBJECT="Apache is down!!"
     MESSAGE=`hostname`
     mail -s "$SUBJECT" $ADDRESS <<EOF
$MESSAGE
EOF
   fi
   sleep 60
 done
else
 echo `date "+%Y/%m/%d-%H:%M:%S"` apacheCheck.sh is already active.
fi
  • 60秒毎にhttpdのプロセスがあるかチェックして、落ちてたら、gracefulで起動する。
  • このshが既に動いているならスルー。
  • このshが落ちてたら嫌なので、一応crontabで毎時で実行。
  • 落ちてたら、メールもしてみる。
  • マシンそのものが落ちたら諦めよう。
  • MySQLが落ちても諦めよう。
▼追記 2010/5/6 23:26
失敗。crontabだとジョブが終了する。

こいつを毎分で動かせばいいんじゃ!
#!/bin/sh

isAlive=`ps -ef | grep httpd | grep -v grep | wc -l`
#    echo $isAlive
if [ $isAlive -eq 0 ]; then
 echo `date "+%Y/%m/%d-%H:%M:%S"` apache is down!!!!!
 /opt/local/apache2/bin/apachectl graceful
 
 ADDRESS="メール@アドレスだよ"
 SUBJECT="Apache is down!!"
 MESSAGE=`hostname`
 mail -s "$SUBJECT" $ADDRESS <<EOF
$MESSAGE
EOF
fi
▼追記 2010/11/29 23:34
どうもapacheが変な落ち方をすると、httpdが残るようだ。で、リスタートもできなかったりする。判別をcurlにする。あと、gracefulだとmod_proxy_balancerがだめだからrestartに。あと、リスタート前に残っている「httpd」をkill。

#!/bin/sh

isAlive=`curl -s --head http://localhost | head -n 1 | grep "^HTTP/" | wc -l`
#echo $isAlive
if [ $isAlive -eq 0 ]; then
 echo `date "+%Y/%m/%d-%H:%M:%S"` apache is down!!!!!
 pid=`ps -axw | grep "httpd" | awk '{print $1}'`
 kill $pid
 /opt/local/apache2/bin/apachectl restart
 
 ADDRESS="メール@アドレスだよ"
 SUBJECT="Apache is down!!"
 MESSAGE=`hostname`
 mail -s "$SUBJECT" $ADDRESS <<EOF
$MESSAGE
EOF
fi

curlはここを参考
http://ja.efreedom.com/Question/1-2924422/シェル-スク...

Rottel内コンテンツ

ユーザー一覧

Rottelとは?
利用規約
開発飲料
利用者の声
ヘルプ
close