supervisorを使ってプロセスを管理します.

5059 ワード

supervisorを使ってプロセスを管理します.
Supervisor(http://supervisord.org)Pythonで書いたプロセス管理ツールであり、起動、再起動、クローズプロセス(Pythonプロセスだけではない)を簡単に利用できます.単一のプロセスに対する制御以外に、複数のプロセスを同時に起動し、シャットダウンしてもいいです.例えば、不幸なサーバに問題があって、すべてのアプリケーションが殺されてしまいました.この時はsupervisorで同時にすべてのアプリケーションを起動できます.
インストール
SupervisorはLinux、Mac OS Xで動作できます.前述のようにsupervisorはPythonで作成されていますので、インストールも簡単です.直接pipを使うことができます.
supervisord配置
Supervisorはかなり強くて、豊富な機能を提供していますが、その中の一部だけを使うことができます.インストールが完了したら、プロファイルを作成して、自分のニーズを満たすことができます.便利さのために、私達は配置を二つの部分に分けます.supervisorとアプリケーション(つまり私達が管理するプログラム)があります.
まずsupervisordのプロファイルを見てください.supervisorをインストールしたら、echo_を実行できます.supervisordconfコマンドは、デフォルトの設定項目を出力し、設定ファイルにリダイレクトすることもできます.sudo pip install supervisor中のほとんどのコメントと「関係ない」部分を除いて、先にこれらの構成を見てもいいです.
[unix_http_server]
file=/tmp/supervisor.sock   ; UNIX socket   ,supervisorctl    
;chmod=0700                 ; socket     mode,    0700
;chown=nobody:nogroup       ; socket     owner,  : uid:gid

;[inet_http_server]         ; HTTP    ,   web     
;port=127.0.0.1:9001        ; Web         IP    ,       ,       
;username=user              ;           
;password=123               ;          

[supervisord]
logfile=/tmp/supervisord.log ;     ,    $CWD/supervisord.log
logfile_maxbytes=50MB        ;       ,    rotate,   50MB
logfile_backups=10           ;              10
loglevel=info                ;     ,   info,  : debug,warn,trace
pidfile=/tmp/supervisord.pid ; pid   
nodaemon=false               ;        ,    false,   daemon      
minfds=1024                  ;               ,   1024
minprocs=200                 ;             ,   200

; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ;    UNIX socket    supervisord,    unix_http_server     file   
;serverurl=http://127.0.0.1:9001 ;    HTTP       supervisord

;          
[include]
files = relative/directory/*.ini    ;     *.conf   *.ini
上記の構成を/etc/supervisord.co(または他の任意のアクセス権限のあるファイル)に保存してsupervisordを起動します.echo_supervisord_conf > /etc/supervisord.conf supervisordが実行されているかどうかを確認する:$CWD/supervisord.conf, $CWD/etc/supervisord.conf, /etc/supervisord.conf):program配置
上でsupervisrodを実行しましたが、今は管理するプロセスのプロファイルを追加できます.すべての設定項目をsupervisord.co.cnfファイルに書いてもいいですが、これを推奨するのではなく、includeの方式で異なるプログラムを異なる配置ファイルに書き込んでください.
例を挙げるために、私達は新しいディレクトリ/etc/supervisor/これらのプロファイルを保存するために、それに応じて/etc/supervisord.co nfのinclude部分の配置を変更します.supervisord -c /etc/supervisord.confPythonとFlaskの枠組みで作成されたユーザーセンターシステムがあると仮定して、usercenterと名づけて、gnicorn(http://gunicorn.org/)webサーバーをします.プロジェクトコードは/home/leon/project/usercenterにあります.gnicornプロファイルはgnicorn.pyです.WSGI carbleはwsgi.pyのap属性です.コマンドラインで直接起動する方式は、ps aux | grep supervisordです.
現在はプロファイルを作成してこのプロセスを管理しています.
[program:usercenter]
directory = /home/leon/projects/usercenter ;        
command = gunicorn -c gunicorn.py wsgi:app  ;     ,                    
autostart = true     ;   supervisord           
startsecs = 5        ;    5         ,          
autorestart = true   ;            
startretries = 3     ;           ,    3
user = leon          ;        
redirect_stderr = true  ;   stderr      stdout,   false
stdout_logfile_maxbytes = 20MB  ; stdout       ,   50MB
stdout_logfile_backups = 20     ; stdout        
; stdout     ,                   ,          (supervisord          )
stdout_logfile = /data/logs/usercenter_stdout.log

;      environment           ,           PYTHONPATH
; environment=PYTHONPATH=$PYTHONPATH:/path/to/somewhere
一つのプロファイルには少なくとも一つの「program:x」部分の構成が必要であり、supervisortlにそのプロセスを管理する必要があることを教えます.「program:x」文法のxはprogram nameを表しています.クライアントに表示されます.supervisorculではこの値によって手順をstart、retart、stopなどの操作が行われます.
supervisorculを使う
Supervisorculはsupervisordのコマンドラインクライアントツールであり、起動時はsupervisordと同じプロファイルを使用する必要があります.そうでなければsupervisordと同じ順序でプロファイルを検索します.
上のこのコマンドはsupervisorculのshellインターフェースに入ります.その後、異なるコマンドを実行できます.
> status    #       
> stop usercenter   #    usercenter   
> start usercenter  #    usercenter   
> restart usercenter    #    usercenter   
> reread    #      (  )     ,          
> update    #             
これらのコマンドにはそれぞれの出力があります.supervisorculのshellインターフェースに入る以外に、直接bash端末でも実行できます.
$ supervisorctl status
$ supervisorctl stop usercenter
$ supervisorctl start usercenter
$ supervisorctl restart usercenter
$ supervisorctl reread
$ supervisorctl update 
その他
supervisorculの他に、supervisrodはウェブ管理インターフェースを起動するように構成されています.このウェブバックはBaic Authを使用してアイデンティティ認証を行います.単一プロセスの制御のほかに、グループ管理も構成されています.supervisordのログと各pragramのログファイル、プログラムcrasまたは例外を含むログファイルをよく調べます.情報の半分はstderに出力されます.対応するログファイルを確認して問題を探します.
Supervisorは豊富な機能を持っています.他にも多くの構成があります.公式文書でより多くの情報を得ることができます.http://supervisord.org/index.html