オープンソースコンポーネントのsupervisord


公衆番号:「糞製品マネージャー」  qq:1013896790  交流を歓迎する
オープンソースコンポーネントはインターネット分野で非常に重要な一部であり、製品やプロジェクトを構築する際に、オープンソースコンポーネントを使用することで、開発効率を向上させ、自分のビジネスロジックに注目することができます.一方、オープンソースコンポーネントは、アーキテクチャ、テクノロジーの詳細においても、私たちが参考にして学ぶ価値のあるものがたくさんあります.
supervisord
supervisordって何?
supervisordはプロセス管理ソフトウェアであり、異なるプロセスに対して同じ方法で起動、停止、再起動、監視を行うことができます.
なぜsupervisordを使うのか
サーバ上のサービスを統一的に管理し、監視し、メンテナンス担当者は異なるサービスの起動と停止方法が何であるかを記憶する必要がなく、supervisorctlサービス名start/stop/restartなどを通過することができます.また、supervisordには、その名の通り、supervisorが監視しているサービスが異常に終了すると、supervisordはSIGCHLD信号を受信し、supervisordはすぐにサービスを再起動し、作業を継続します.
supervisordの使い方
supervisordのインストールと構成は非常に簡単です.
インストール:
supervisordはyumまたはpipでインストールできます.
yum install supervisor  
pip install supervisor
機器がネットワークに接続できない場合は、オフラインインストール方式でpypiでtarパッケージまたはwhlアップロード機器をダウンロードしてインストールできます
https://pypi.org/project/supervisor/#files
tarパッケージ
tar zxvf supervisor.tar.gz;cd supervisor;python setup.py install
whlパッケージ
pip install supervisor.whl
オフラインインストールではsetuptoolsとmeld 3の2つのパッケージに依存する可能性がありますが、同じpypiでダウンロードしてインストールした後、supervisordをインストールできます.
  • setuptools (latest) from https://pypi.org/pypi/setuptools/.
  • meld3 (latest) from https://pypi.org/pypi/meld3/.

  • 構成(転入元)http://lixcto.blog.51cto.com/4834175/1539136):
    [unix_http_server]            
    file=/tmp/supervisor.sock   ; socket     ,supervisorctl XML_RPC supervisord         
                                   。       ,supervisorctl        
                                       ,   none。              
    ;chmod=0700                 ;     ,         socket      0700
                                       ,   0700。      
    ;chown=nobody:nogroup       ;     ,       socket      user.group
                                       ,     supervisord        。     
    ;username=user              ;   supervisorctl     ,     
                                        ,        。      
    ;password=123               ;             ,        ,     SHA  
                                   :{SHA}82ab876d1387bfafe46cc1c8a2ef074eae50cb1d
                                       。。。     
    
    ;[inet_http_server]         ;    TCP  socket,Web Server    supervisorctl     
                                       ,      。     
    ;port=127.0.0.1:9001        ;       IP   ,    IP  :9001 *:9001。
                                        ,     [inet_http_server]   ,      
    ;username=user              ;       uinx_http_server   。     
    ;password=123               ;       。     
    
    [supervisord]                ;       supervisord             
                                        ,   ,supervisor      
    logfile=/tmp/supervisord.log ;    supervisord          ,            。
                                       $CWD/supervisord.log,$CWD     。。     
    logfile_maxbytes=50MB        ;                  ,   50M   ,         
                                      。    0 ,         
                                       50M,     。              
    logfile_backups=10           ;          ,         50M ,         。  
                                       10 ,            ,        10
                                       0 ,          。
                                         10。。。     
    loglevel=info                ;     , critical, error, warn, info, debug, trace, or blather 
                                      info。。。      
    pidfile=/tmp/supervisord.pid ; supervisord pid    。
                                      $CWD/supervisord.pid。。。     
    nodaemon=false               ;    true,supervisord        
                                      false,            。。。     
    minfds=1024                  ;                ,     supervisor     。
                                                cat /proc/sys/fs/file-max
                                         1024。。。     
    minprocs=200                 ;           ,     supervisor        。
                                  ulimit  -u    ,    linux          
                                     200。。。     
    ;umask=022                   ;          
                                      022。。      
    ;user=chrism                 ;            root  ,    root    supervisord  。
                                              ,    supervisord    
                                           。。。      
    ;identifier=supervisor       ;      supervisord    ,    XML_RPC  。     
                                   supervisor   ,     XML_RPC    ,      
                                   supervisor         
                                      supervisord。。。     
    ;directory=/tmp              ;       supervisord           ,        ,  
                                   supervisord    ,         
                                        。。。     
    ;nocleanup=true              ;       false   ,  supervisord       ,      
                                          (   AUTO    )   。            ,  
                                            。       true
                                      false,             true。。。     
    ;childlogdir=/tmp            ;          AUTO   ,            。
                                            ,            OK ,          
                                   python -c "import tempfile;print tempfile.gettempdir()"
                                        
    ;environment=KEY="value"     ;             ,supervisord linux        linux 
                                       ,       supervisord           。
                                   supervisord      ,                。      
                                                 。
                                      :environment=name="haha",age="hehe"
                                         。。。     
    ;strip_ansi=false            ;          true,            ANSI   。   ANSI
                                      ?     
    ,\t 。 false。。。 ; 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] ; XML_RPC , supervisord web server supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] ; supervisorctl serverurl=unix:///tmp/supervisor.sock ; supervisorctl supervisord , UNIX socket , [unix_http_server] unix:///tmp/supervisor.sock。。 ;serverurl=http://127.0.0.1:9001 ; supervisorctl supervisord , TCP socket [inet_http_server] http://127.0.0.1:9001。。。 ;username=chris ; 。。 ;password=123 ; 。。 ;prompt=mysupervisor ; supervisor。。 ;history_file=~/.sc_history ; shell history , no file 。。 , 。。。 ; The below sample program section shows all possible program subsection values, ; create one or more 'real' program: sections to be able to control them under ; supervisor. ;[program:theprogramname] ; ,":" , 。 program , program ;command=/bin/cat ; , :/home/test.py -a 'hehe' , command , 。 , command=service httpd start。 httpd linux service , supervisor 。 ;process_name=%(program_name)s ; , numprocs 1 , , %(program_name)s program , numprocs , 。 , 。 ;numprocs=1 ; 。 1 , , process_name 1 。。 ;directory=/tmp ; , 。。。 ;umask=022 ; , none, ;priority=999 ; , , , 999 。。 ;autostart=true ; true , supervisord true 。。 ;autorestart=unexpected ; , ,false,unexpected true。 false , , , unexpected, exitcodes , 。 true , , ;startsecs=1 ; , running, 1 。。 ;startretries=3 ; , 。。 3 ,supervisor FAIL 3 。。 ;exitcodes=0,2 ; autorestart=unexpected 。。exitcodes expected 。 ;stopsignal=QUIT ; , TERM, HUP, INT, QUIT, KILL, USR1, or USR2 TERM 。。 , expected ;stopwaitsecs=10 ; stopsignal , supervisord, 。 ,supervisord kill 。 10 。。 ;stopasgroup=false ; ,supervisord , 。 supervisord , 。 , 。 true , killasgroup true。 , stop false。。 。。 ;killasgroup=false ; stopasgroup , kill ;user=chrism ; supervisord root , root , program 。。。 ;redirect_stderr=true ; true, stderr stdout false, ;stdout_logfile=/a/path ; stdout , ,AUTO,none 。 none , 。 AUTO , , supervisord , 。 redirect_stderr=true ,sterr ;stdout_logfile_maxbytes=1MB ; , [supervisord] 。 50 ;stdout_logfile_backups=10 ; [supervisord] 。 10 ;stdout_capture_maxbytes=1MB ; capture , 0 , stdout , supervisor , event。 0, 0 。。。 ;stdout_events_enabled=false ; ture , stdout , supervisord PROCESS_LOG_STDOUT event false。。。 ;stderr_logfile=/a/path ; stderr , redirect_stderr=true。 , 。 stdout_logfile AUTO, ,supervisord 。。 ;stderr_logfile_maxbytes=1MB ; , ;stderr_logfile_backups=10 ; ;stderr_capture_maxbytes=1MB ; , stdout_capture 。 0, ;stderr_events_enabled=false ; , false ;environment=A="1",B="2" ; , ;serverurl=AUTO ; ; The below sample eventlistener section shows all possible ; eventlistener subsection values, create one or more 'real' ; eventlistener: sections to be able to handle event notifications ; sent by supervisor. ;[eventlistener:theeventlistenername] ; program , suopervisor , supervisord event。 listener 。 listener , , ;command=/bin/eventlistener ; program , listener ;process_name=%(program_name)s ; , , numprocs , 。 OK ;numprocs=1 ; listener ;events=EVENT ; event , , 。 ;buffer_size=10 ; event , , 。 buffer 10 , event , event 。 10。。 ;directory=/tmp ; , 。。。 ;umask=022 ; , none, ;priority=-1 ; , -1, ;autostart=true ; supervisord , true ;autorestart=unexpected ; , program , true,false,unexpected , unexpected exitcodes ;startsecs=1 ; , , , 1 ;startretries=3 ; , 3 ;exitcodes=0,2 ; , ;stopsignal=QUIT ; , TERM, QUIT, QUIT , expected ;stopwaitsecs=10 ; max num secs to wait b4 SIGKILL (default 10) ;stopasgroup=false ; send stop signal to the UNIX process group (default false) ;killasgroup=false ; SIGKILL the UNIX process group (def false) ;user=chrism ; , listener 。 。。 ;redirect_stderr=true ; true ,stderr log stdout log false。。。 ;stdout_logfile=/a/path ; , ;stdout_logfile_maxbytes=1MB ; ;stdout_logfile_backups=10 ; ;stdout_events_enabled=false ; ,listener event ;stderr_logfile=/a/path ; ;stderr_logfile_maxbytes=1MB ; ;stderr_logfile_backups ; ;stderr_events_enabled=false ; ,listener event ;environment=A="1",B="2" ; 。。。 ;serverurl=AUTO ; override serverurl computation (childutils) ; The below sample group section shows all possible group values, ; create one or more 'real' group: sections to create "heterogeneous" ; process groups. ;[group:thegroupname] ; programs , program。 。 :program , supervisor 。。。supervisor , program ;programs=progname1,progname2 ; , ;priority=999 ; , 999。。 ; The [include] section can just contain the "files" setting. This ; setting can list multiple files (separated by whitespace or ; newlines). It can also contain wildcards. The filenames are ; interpreted as relative to this file. Included files *cannot* ; include files themselves. ;[include] ; , , 。 , include ;files = relative/directory/*.ini
     開始:
    supervisord -c supervisor.conf
    supervisor.confはsupervisordとsupervisorctlで同時に使用され、-cパラメータを追加しない場合、supervisorは以下の順序で検索されます.
  • $CWD/supervisord.conf
  • $CWD/etc/supervisord.conf
  • /etc/supervisord.conf
  • /etc/supervisor/supervisord.conf (since Supervisor 3.3.0)
  • ../etc/supervisord.conf (Relative to the executable)
  • ../supervisord.conf (Relative to the executable)

  • 使用:
    上記の構成を例にとると、theprogramnameというプロセスを操作するには、コマンドは
    supervisorctl  start/stop/restart  theprogramname
    手動killでtheprogramenameというプロセスを落とすと、すぐにsupervisorに引っ張られることに気づきます
    詳細はsupervisordの公式サイトを参照してください.
    http://www.supervisord.org/index.html