スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

bashでhttpサーバの監視

Apache用にhttpサーバの監視スクリプトを書きました。
まあ、httpサーバならなんでもいいんですけど。
監視したいURLと、そのURLにアクセスした時に返ってくるデータのなかに含まれる文字列をTARGETに指定します。
指定回数失敗すると、スクリプトの最後の命令が実行されます。
メールを送るなり、フェールオーバーするなり、好きなことができます。

スクリプトの肝はcheck_onceのところです。
wgetの-Oオプションにハイフン(-)を渡すと、標準出力に出力されます。
その内容をgrepに渡してtarget文字列を検索します。
grepで検索がマッチすると、行が生成されるのでwcコマンドで行数を数えて1行以上あれば、正常とみなします。


#!/bin/bash

# 監視したいURL
URL='http://example.com/'

# 監視したい文字列
TARGET='alive'

# アクセスタイムアウト
TIMEOUT=10

# 監視回数、この回数回失敗した場合失敗とみなす
REPEAT=3

# 一回失敗した後のスリープ時間
REPEAT_SLEEP=2

# 成功した後のスリープ時間
SUCCESS_SLEEP=5

# 指定したURLから指定した文字列が入っているかチェック
# 引数
# 1. チェックしたいURL
# 2. チェックしたい文字列
# 3. タイムアウト秒
# 返り値
# 含まれている数
function check_once() {
return `wget --timeout $3 -O - $1 2> /dev/null |grep $2|wc -l`;
}

# 指定したURLが生きているかチェック
# 引数
# 1. チェックしたいURL
# 2. チェックしたい文字列
# 3. タイムアウト秒
# 4. チェック回数
# 5. スリープ秒
function check() {
count=1
while [ $count -le $4 ]
do
check_once $1 $2 $3
if [ $? -ne 0 ];
then
return 0
fi
if [ $count -eq $4 ];
then
return 1
fi
sleep $5
count=`expr $count + 1`
done
return 1
}

# 生きている間チェックしつづける
while check $URL $TARGET $TIMEOUT $REPEAT $REPEAT_SLEEP; do
sleep $SUCCESS_SLEEP
done
echo fail!

一行入魂サイトにまとめがあります。
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。