HTTPステータスが異常だった時、メール送信してくれるshell script
Webサーバやデータベースサーバが落ちてしまった時、
早めに対策練りたいですよね、やっぱり。
でも常に人の監視は不可能に近い・・・
そこで200 OK以外が返ってきたらメールで連絡してくれるシェルスクリプトを作ってみました。
参考にさせて頂いたサイトです。
- wgetコマンドで指定したURLにHTTPでアクセスできるかどうかを確認する
- シェルスクリプトでメールを送信する
- 実行したコマンドの終了コードを表示する
- 【 grep 】 文字列を検索する
- crontabで設定したタスク実行時に、メールを送信しないようにする。
そのまま使わせて頂いているコードもあります。
ありがとうございます。
勉強したこと
- 正常の場合、HTTPステータスコードが”200″が返ってくればいいので、逆に”200″以外だったらエラーとすればいい。
- grep -c は検索条件にマッチした行数を表示
- 実行したコマンドの終了コードの確認をする場合は echo $? を使う
- 2>&1 は標準エラー出力先を標準出力先と同じにする
- cronが実行された時にメール必要ない場合、command > /dev/null 2>&1 の様に > /dev/null を指定する
shell script
[shell]
#!/bin/sh
wget -nv –spider –timeout 60 -t 1 http://ウェブアドレス/ 2>&1 | grep -c ‘200 OK’
if [ $? -eq 0 ]; then
# 正常
echo “good”
exit 1
fi
PROJECT_NAME=dirname $0 | sed -e 's#\(.*\)\/\(.*\)#\2#g'
if [ ${PROJECT_NAME} = ‘.’ ]; then
# スクリプトが置かれているディレクトリで実行した場合は pwd を使う
PROJECT_NAME=pwd | sed -e 's#\(.*\)\/\(.*\)#\2#g'
fi
SCRIPT_NAME=basename $0
MAIL_ADDRESS=hogehoge@hogehogehoge.com
SUBJECT=”[${PROJECT_NAME}]${SCRIPT_NAME}”
BODY=”メッセージ”
echo ${BODY} | mail -s ${SUBJECT} ${MAIL_ADDRESS}
[/shell]
wgetのウェブアドレスとMAIL_ADDRESS=などはそれぞれの環境に変更してくださいね。
自動監視の設定
[shell]
$ sudo crontab -e
[/shell]
で定期実行を設定して
[shell]
$ sudo /etc/init.d/cron start
[/shell]
監視スタートです。