スポンサーサイト

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

bashとcronでhttpサーバ監視

bashでhttpサーバ監視という記事を以前書きましたが、昨日書いた記事と同じようにcronで動かすbashスクリプトを作成しました。

#!/bin/bash

# エラー通知を受けるメールアドレス
MAIL=me@example.com

# チェックを無視するファイル
NOCHECK=/tmp/nocheck

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

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

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

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

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

# 指定した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
}

# 監視チェックしないファイルが存在したら正常終了
if [ -e $NOCHECK ];
then
exit 0
fi

# チェック
check $URL $TARGET $TIMEOUT $REPEAT $REPEAT_SLEEP
if [ $? -ne 0 ];
then
echo fail_http $URL | mail -s fail_http $MAIL
exit 1
fi
exit 0

http_watch.shというファイル名で保存し、実行権限を与えます。
chmod 755 /opt/http_watch.sh

cronは以下の通りです。
10 * * * * /opt/http_watch.sh

毎時10分ごとに、指定のURLにアクセスして、指定の文字が入っているかチェックします。
ダメならメールを送信します。

また、一時的に監視を止めたい場合、/tmp/nocheckというファイルを作成すると
プロセスの状況によらず、このスクリプトは正常終了します。
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


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

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