りんごやブログ谷根千震災字報kayaba-coffee.com/人生飛ばず落ちず、楽しくもあり。Codestrftimeの%aで曜日を出力するのはやめたlocaleを使ってみたりいろいろと試してみたけれど、無理にstrftimeの%aで曜日を漢字で出力するのは今ひとつだった。ディストリビューションによって挙動が変わったり、OSのメジャーアップデートで文字化けしてみたり。それぞれに事情はいろいろあって、単にバグだったり、必要なパッケージが変わってたりと、まあ仕方ないかなあと思うことも少なくない。ああでもないこうでもないと、忘れてしまっても問題ない方法を考えてみた。シンプルなHTTPサーバの監視ツールで公開しているツールですが、手元の環境では随分前にTCPタイムアウトの設定ができるように変更して運用しています。問い合わせをいただいて思い出したのでGist:343248に反映させました。タイムアウト値(設定変数名=tcp_timeout)は1未満にはできません。1以上の整数を指定してください。シンプルなHTTPサーバの監視ツールPythonで月末、月初。シンプルな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に置いてあります。