PythonのDaemonマネージャ-zdaemon
6376 ワード
PythonのDaemonマネージャ-zdaemon
作成者:
日付:
gashero
2009-09-07
目次
1 概要
サーバープログラムをよく開発するので、強いdaemon管理プログラムが重要です.これまで使った最も頼りになる方法はtwistedが持っていたtwistdです.しかし、それを管理するには、プログラムを大量に修正する必要があります.本当に不便です.
要するに、daemonモードに入ることができ、すべてのスクリーン印刷ログと異常ログを記録することができます.
zdaemonはZOPEプロジェクトのサブプロジェクトの一つです.
プロジェクトホームページ:http://pypi.python.org/pypi/zdaemon
注意:ez_がインストールされていない場合setup.pyのセットは、インストールが完了するとzdaemonコマンドがありません.
2 コマンドインタフェース
zdaemonの主な入り口はzdaemonプログラムです.
サブコマンドは次のとおりです.
フロントが起動し、-pオプションで実行するプログラムを指定します.
$ zdaemon -p "echo hello world" fg
デーモンプロセスの開始:
$ zdaemon -p "sleep 100" start
. .
daemon process started, pid=819
デーモンのステータスを確認するには、次の手順に従います.
$ zdaemon -p "sleep 100" status
program running; pid=819
デーモンの停止:
$ zdaemon -p "sleep 100" stop
. .
daemon process stopped
$ zdaemon -p "sleep 100" status
daemon manager not running
4 プロファイル管理の使用
履歴書プロファイル、指定プログラム:
$ cat zd.conf
<runner>
program sleep 100
</runner>
$ zdaemon -Czd.conf start
. .
daemon process started, pid=1136
$ zdaemon -Czd.conf stop
. .
daemon process stopped
この場合、現在のディレクトリにファイルzdsockが生成され、zdaemonの内部管理用になります.
プロファイルでsockファイルの場所を指定します.
<runner>
program sleep 100
socket-name /tmp/demo.zdsock
</runner>
zdaemonを使用してアプリケーションにパラメータを渡すことができます.
$ cat zd.conf
<runner>
program sleep
socket-name /tmp/demo.zdsock
</runner>
$ zdaemon -Czd.conf start 100
. .
daemon process started, pid=1149
環境変数をプロファイルに渡すには、次の手順に従います.
<runner>
program env
socket-name /tmp/demo.zdsock
</runner>
<environment>
LD_LIBRARY_PATH /home/foo/lib
HOME /home/foo
</environment>
daemonが実行されると、プログラムの標準入力が閉じられ、標準出力とエラー出力が制御され、オプションで標準出力またはファイルにリダイレクトされます.これらはtranscriptオプションによって制御され、長時間実行するプログラムに必要です.
例の構成を見てください.
<runner>
program tail -f data
transcript log
</runner>
実行中はログファイルの名前を変更できますが、zdaemonはまだそのファイルを開いているので、名前が変わっても出力はそのファイルに残ります.この場合、zdaemonにログを再開するように通知すると、元の定義されたログファイルに出力できます.
zdaemon -Czd.conf reopen_transcript
5 リファレンスドキュメント
次のパラメータは、プロファイルのrunnerセグメントまたはコマンドラインオプションに使用できます.
(他のオプションは、古いプロファイルにのみ有効ですが、不要で無視されます.)
runnerセグメントに加えてeventlogセグメントを使用してログファイルを指定することもできます.
<eventlog>
<logfile>
path /var/log/foo/foo.log
</logfile>
<logfile>
path STDOUT
</logfile>
</eventlog>
この例では、ログはファイルと標準出力に送信されます.zdaemonのログ出力は通常面白くありませんが、デバッグに使用できます.