PythonのDaemonマネージャ-zdaemon



PythonのDaemonマネージャ-zdaemon
作成者:
日付:
gashero
2009-09-07
目次
  • 1   概要
  • 2   コマンドインタフェース
  • 3   コマンドラインコントロール
  • 4   プロファイル管理の使用
  • 5   リファレンスドキュメント

  • 1   概要
    サーバープログラムをよく開発するので、強いdaemon管理プログラムが重要です.これまで使った最も頼りになる方法はtwistedが持っていたtwistdです.しかし、それを管理するには、プログラムを大量に修正する必要があります.本当に不便です.
    要するに、daemonモードに入ることができ、すべてのスクリーン印刷ログと異常ログを記録することができます.
    zdaemonはZOPEプロジェクトのサブプロジェクトの一つです.
    プロジェクトホームページ:http://pypi.python.org/pypi/zdaemon
    注意:ez_がインストールされていない場合setup.pyのセットは、インストールが完了するとzdaemonコマンドがありません.
    2   コマンドインタフェース
    zdaemonの主な入り口はzdaemonプログラムです.
    サブコマンドは次のとおりです.
  • start:daemon
  • としてプロセスを開始
  • stop:プロセス停止
  • restart:プロセスを再起動
  • status:プロセス実行ステータスの表示
  • foregroundまたはfg:プログラム
  • を実行
  • kill signal:daemonプロセス
  • にsignalを送信
  • reopen_Transcript:ログ
  • を再開
  • help command:コマンドを表示するヘルプ
  • 3   コマンドラインコントロール
    フロントが起動し、-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セグメントまたはコマンドラインオプションに使用できます.
  • program、コマンドライン-p/--program:このオプションは、実行するプログラム
  • を示します.
  • socket-name、コマンドライン-s/--socket-name:Unixソケットパス
  • を指定
  • daemon、コマンドライン-d/--daemon:trueの場合はバックグラウンドで実行され、デフォルトはオンです.サブプロセスでは、次の作業が行われます.
  • directoryオプションが存在する場合、そのディレクトリ
  • に切り替える.
  • stdin、stdout、stderrから/dev/null
  • にリダイレクト
  • は、セッションのメインプロセス
  • としてsetsid()を呼び出す.
  • umask()
  • を呼び出す
  • directory、コマンドライン-z/--directory:デーモン実行時のディレクトリを指定する
  • backoff-limit、コマンドライン-b/--backoff-limit:サブプロセスが停止すると、zdaemonは1秒の遅延後に再起動します.サブプロセスが再び停止すると、遅延はさらに1秒増加します.遅延がbackoff-limitに増加するとforeverオプションの値に依存します.foreverがfalseの場合、zdaemonは放棄して終了します.頻繁に停止するサブプロセスでは、backoff-limit回のみの再起動が制限されます.foreverがtrueの場合、zdaemonはbackoff-limitの遅延を維持するために再起動を試み続けます.サブプロセスの保持時間がbackoff-limit秒を超えると、遅延は1秒にリセットされます.デフォルトは10です.
  • forever、コマンドライン-fまたは--forever:trueの場合、保留中のサブプロセスは再起動され続け、falseの場合、backoff-limit回後に放棄されて終了します.デフォルトは無効です.
  • exit-codes、コマンドライン-x、または--exit-codes:サブプロセスの終了コードがリストにある場合、zdaemonは再起動しません.デフォルト値は0,2で、通常の終了とコマンド構文エラーを表します.これらの場合、再起動しても何の役にも立たない.この動作はbackoff-limitとforeverオプションを再ロードします.無効にするには、値を空のリストに設定します.
  • user、コマンドライン-uまたは--user:rootがzdaemonを使用して起動すると、このオプションは実際の実行ユーザーを指定し、パラメータはユーザー名またはユーザーIDで使用できます.userとgroupは、正しいパスワードエントリからsetuid()とsetgid()を使用して設定されています.この操作は、コマンドラインパラメータ解析を除いてzdaemonの他のすべての操作の前に行われます.注意zdaemonがrootで起動していない場合、このオプションを指定するとエラーが発生します.注意イベントログはsetuid()の前に呼び出されますが、これは良いですか?悪いですか?
  • umask、コマンドライン-mまたは--umask:デーモンプロセスを使用する場合、umaskを8進数で指定します.
  • default-to-interactive、コマンドライン-iまたは--interactive:このオプションがtrueと指定されている場合、コマンドパラメータが追加されていない場合、zdaemonはインタラクティブモードに入ります.falseの場合、インタラクティブモードに入るにはコマンドラインパラメータを指定する必要があります.デフォルトで有効です.
  • logfile:logtailコマンドのデフォルトログファイルを指定します.これはzdaemonがログ情報を記録するログファイルではありません.そのログはセグメントで記述されています.
  • transcript:レプリカログのファイル名を記録し、コマンドのすべての出力レプリカが記録されます.コマンド出力が指定されていない場合は破棄されます.daemonオプションが有効な場合にのみ有効です.
  • prompt:プログラムが使用するプロンプトを制御します.デフォルトはアプリケーションによって提供されます.

  • (他のオプションは、古いプロファイルにのみ有効ですが、不要で無視されます.)
    runnerセグメントに加えてeventlogセグメントを使用してログファイルを指定することもできます.
    <eventlog>
        <logfile>
            path /var/log/foo/foo.log
        </logfile>
        <logfile>
            path STDOUT
        </logfile>
    </eventlog>
    

    この例では、ログはファイルと標準出力に送信されます.zdaemonのログ出力は通常面白くありませんが、デバッグに使用できます.