持ち運ぶデバイスと回線を分離できるのは、エンジニアとしては良い感じがするなあ。Kindleが欲しくなっても、iPadにしても、ほかのAndroid端末でも追加できるもんなあ。ひっかかるところも多い。p.s.今ふと、はっ、僕はこんなにがんばってネット接続が必要なのか?これはなんだかがんばりすぎじゃないか?と思った。シンプルなHTTPサーバの監視ツールWEBサイトの死活監視のサービスはいろいろあるけれど、どれも監視できるURL数に制限があったり、制限を解除してもらうには費用がかかるわけなのだけれど求める以上の機能があってちょっと高くついたり。仕方がない、さくらのレンタルサーバが1つあるのでそこで監視するようにしてみよう。社内のサーバ監視をしているNagiosは便利なんだけれど、さくらの500円/月のレンタルサーバに入れるのはちょっとアレだし、必要最小限のスクリプトをPythonで書くことにする。求めた要件としては、HTTPで接続できなかったらメールでお知らせが届く。一回メールを送ったら、しばらくはメールしないで欲しい。HEADとGETとPOSTに対応。HTTPステータスコードだけをチェックする(レスポンスに含まれるコンテンツのチェックは不要)。設定ファイルで複数のURLをまとめてチェックして欲しい。(さくらなので)常駐するデーモンではなくて、単独のコマンドで実行できる(cronで繰り返し実行)。お知らせメールはcrontabのMAILTOで送るからstderrに出力してくれればいい。OKだったときのログはstdoutに出力してくれればいい。スクリプトは1ファイルで完結させる。Python2.4以降、標準ライブラリだけで動く。URLとURLを引数に指定する方法。これだと細かい設定はできませんが、HEADでチェック、お知らせメールは多くて10分に1回、となります。htpchk.confと引数に設定ファイルを指定する(あるいは引数指定を省略して、htpchk.pyと同じディレクトリにhtpchk.confという設定ファイルを置いておく)と、複数のURLを一括してチェックできるようになります。設定ファイルは、Windowsのiniファイルに良く似た書き方です。DEFAULTセクションは全セクションのデフォルト値として使われます。あとはチェックするURL毎にセクションを作ってurlパラメータを書いておくだけで1と同様にチェックはできます。セクション毎にDEFAULTセクションの値を上書きできるので、細かい変更がしたい場合はセクションに値を書きます。詳しい設定ファイルの書き方は後の方のサンプルをご覧ください。cronにこのスクリプトを実行するように登録しておく(さくらのレンタルサーバではこんな感じ)。/home/example/bin/にhtpchk.pyとhtpchk.confを置いたとするとこんな感じ。>/dev/nullこれで、5分に一回htpchk.confに書いてあるサイトをチェックして、HTTPステータスが200じゃなければ、標準エラーにメッセージが出力されて、そのメッセージはMAILTOに書いたメールアドレスに送られます。標準出力は/dev/nullに向けてあるので捨てられます。手元では47のURLをチェックする設定ファイルを書いて運用中。概ね良好なんだけれど、まだチェックするURLを増やしたいのでもう少しチェックにかかる時間を短縮したい。HTTPのリクエストを送る部分をスレッドにして同時実行すれば速くなるのはわかっているので、困ったらスレッド化するかも。以下はスクリプト本体(htpchk.py)と設定ファイル(htpchk.conf)のサンプルです。最新版はGist:343248に置いてあります。