[Python] webサーバーの死活監視


python flask で webサーバーのプログラムを作成した。
運用していると、サーバーがよく停止する。

本来は、停止する原因をつきとめるべきであるが、
エラー発生時のログが取れなく、苦戦した。
次善の策として、サーバーの死活監視をおこなう。

サーバー側に、サーバーの状態を表示するurlのパスを用意する。
正常であれば、現在時刻のunix時間を返送する。

サーバーから取得したunix時間が現在時刻と一致しなければ、
異常と判定し、
サーバーを再起動する。
また、その旨をメール送信する。

以下、Debian 環境の話です。
サーバーの起動 停止は、
init.d スクリプトの start-stop-daemon コマンドで行う
起動 した時、子プロセスが生成される。
start-stop-daemon コマンドで停止した時は、当該プロセスは停止するが、
子プロセスは停止しない。

子プロセスがtcp/ipのポートを使用しているため、
デーモンを再起動すると、
Address already in use というエラーになり、
プロセスは起動するが、
webサーバーとして機能しない。

デーモンを停止する時に、子プロセスも停止するようにする。

参考
init.d スクリプトを書こう
start-stop-daemonいじってみた
他プロセスがポートを占有してhttpdを再起動できない
指定したプロセスIDのプロセスとその子孫全てを再帰的にkillするシェルスクリプト


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です