簡易サイト稼働チェッカー

提供: Wikiducca
2020年10月5日 (月) 10:41時点におけるYosuke (ノート | 投稿記録)による版

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索

概要

ZABBIX や Nagios 等の監視ツールを用意するまでもなく、ただサイトにアクセスしてレスポンスコードが 200 じゃなかったら指定したメールアドレスに通知するシェルスクリプト。

必要なもの

curl と MTA(/usr/sbin/sendmail)。

コード

#!/bin/bash

###
### [サイト稼働監視スクリプト]
###   指定した URL にアクセスし、レスポンスコードが 200 じゃなかったらメールで通知する。
###
### USAGE(crontab): 毎時30分にチェックする例。
###   30 * * * * sh /path/to/check_web.sh https://example.com/
###
### オプション: -f をつけると正常時(200)でも通知する。
###   $ sh check_web.sh -f https://example.com/
###

## 通知設定
### 通知先アドレス
TO="[email protected]"
### 差出人アドレス
FROM="[email protected]"

## スクリプト自身のパスへ移動
cd $(dirname "${0}")

## Log ファイルのパス
LOGFILE="./log/$(date +%Y-%m).log"

### Log ディレクトリがなければ作成
if [ ! -d ./log ]; then
  mkdir ./log
fi

## 引数が2つより多かったらスクリプトを実行しない
if [ $# -gt 2 ]; then
  exit 0
fi

## 検証するURL
TARGET_URL=""

## 通知するかどうかフラグ(0:正常時は非通知/1:常に通知)
NOTIFY=0

## スクリプトへの引数を確認
for ARG in "$@" ; do
  case "${ARG}" in
    -f)
      NOTIFY=1;;
    *)
      TARGET_URL=${ARG}
  esac
done

## 検証した日時
CHECK=$(date +"%Y-%m-%d %H:%M:%S")

## TARGET_URL へのアクセスを試みる
MESSAGE=$(curl -o /dev/null -s -w %{HTTP_CODE} ${TARGET_URL})

## ロギング
echo "${CHECK}:${TARGET_URL}:${MESSAGE}" >> ${LOGFILE}

## 強制送信じゃない、または curl 結果 http_code が 200 だったらスクリプト終了
if [[ ${NOTIFY} -eq 0 && "${MESSAGE}" = 200 ]]; then
  exit 0
fi

## メール通知
SUBJECT="[Check web] ${TARGET_URL}"
MTA="/usr/sbin/sendmail"

Msg()
{
echo "To:${TO}
Subject: ${SUBJECT}
MIME-Version: 1.0
Content-Type: Text/Plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit

${TARGET_URL} へのリクエストが下記のレスポンスコードでした。
確認してください。

レスポンスコード:${MESSAGE}
チェック日時:${CHECK}

"
}

## main
Msg | ${MTA} -f${FROM} ${TO}

exit 0

# EOF

参考・引用