読者です 読者をやめる 読者になる 読者になる

YTsudaのブログ

1985生まれ、男。東京で働くWeb制作者

PythonとcronでURLの死活監視

指定したURLが生きているかどうか監視する必要に迫られたため、なるべく手軽に導入・管理できるものを探したところ、以下の方法に行き着きました。
環境は Ubuntu-12.04 です。

要件

  • 監視対象のURLリストを外部ファイルで入力したい
  • ステータスコードが 200->404 に変化した時と 404->200 に変化したとき、両方でアラートを出したい
  • アラートはメール送信で
  • できればpythonがいい
  • チェック間隔は1時間ぐらい

Site-Monitor

上記の要件で良いツールがないか探していたところ、githubに良さそうなスクリプトがありました。これを使うことにします。

sanbornm/Site-Monitor - github
https://github.com/sanbornm/Site-Monitor

構築

ということで構築を始めます。

Site-Monitorをclone

上記のリポジトリを任意のディレクトリにcloneします。 今回の例ではホームディレクトリに

$ cd /home/my-name
$ git clone https://github.com/sanbornm/Site-Monitor.git

cloneしてきたディレクトリ内のsitemonitor.pyが実行するスクリプトです。

実行用のディレクトリを作る

実行用のシェルスクリプトや設定ファイル等を置くディレクトリを作りました。

$ cd /home/my-name
$ mkdir site-monitor-worker

監視対象のURLリストを作る

監視対象とするURLのリストを書いたリストのファイルを作ります。改行区切りでURLを一つずつ書くフォーマットになっています。

$ cd /home/my-name/site-monitor-worker
$ touch checklist.txt

checklist.txtの中身

http://example.com/
https://example.com/
http://example.com/blog/110
http://example.com/blog/999999999

実行用のシェルスクリプトを作る

sitemonitor.py は引数が多いスクリプトなので、sitemonitor.pyを叩くシェルスクリプトを別に作って同じディレクトリに置きました。

$ cd /home/my-name/site-monitor-worker
$ touch check-urls.sh

check-urls.shの中身

/home/my-name/Site-Monitor/sitemonitor.py \
-g \
-s 'from-user@gmail.com' \
-u 'from-user@gmail.com' \
-p 'password' \
-d 'to-user@example.com' \
-f '/home/my-name/site-monitor-worker/checklist.txt'

設定内容

アラートのメールをgmailから送るように設定しました。

  • -g アラートメールをgmailから送るフラグ
  • -s アラートメールメールの送信主
  • -u gmailのログインID
  • -p gmailのログインパスワード
  • -d アラートメールの送り先
  • -f 監視対象URLリストへのパス

cronの設定

毎時15分に死活チェックをするよう設定しました。

$ crontab -e

crontabの設定内容

15 * * * * /home/my-name/site-monitor-worker/check_urls.sh > /dev/null 2>&1

通知のロジック

1時間毎にチェックを行い、前回チェック時のステータスと違っていたらアラートメールが飛びます。