zoukankan      html  css  js  c++  java
  • 用Supervisord管理Python进程

     1 Supervisord是用Python实现的一款非常实用的进程管理工具,类似于monit(关于monit见我的博客:用monit监控系统关键进程),monit和supervisord的一个比较大的差异是supervisord管理的进程必须由supervisord来启动,monit可以管理已经在运行的程序;supervisord还要求管理的程序是非daemon程序,supervisord会帮你把它转成daemon程序,因此如果用supervisord来管理nginx的话,必须在nginx的配置文件里添加一行设置daemon off让nginx以非daemon方式启动。
     2 Supervisord安装
     3 Supervisord可以通过sudo easy_install supervisor安装,当然也可以通过Supervisord官网下载后setup.py install安装。
     4 Supervisord配置
     5 Supervisord默认的配置文件路径为/etc/supervisord.conf,通过文本编辑器修改这个文件,下面是一个示例的配置文件:
     6 ;/etc/supervisord.conf
     7 [unix_http_server]
     8 file = /var/run/supervisor.sock
     9 chmod = 0777
    10 chown= root:felinx
    11 
    12 [inet_http_server]
    13 # Web管理界面设定
    14 port=9001
    15 username = admin
    16 password = yourpassword
    17 
    18 [supervisorctl]
    19 ; 必须和'unix_http_server'里面的设定匹配
    20 serverurl = unix:///var/run/supervisord.sock
    21 
    22 [supervisord]
    23 logfile=/var/log/supervisord/supervisord.log ; (main log file;default $CWD/supervisord.log)
    24 logfile_maxbytes=50MB       ; (max main logfile bytes b4 rotation;default 50MB)
    25 logfile_backups=10          ; (num of main logfile rotation backups;default 10)
    26 loglevel=info               ; (log level;default info; others: debug,warn,trace)
    27 pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
    28 nodaemon=true              ; (start in foreground if true;default false)
    29 minfds=1024                 ; (min. avail startup file descriptors;default 1024)
    30 minprocs=200                ; (min. avail process descriptors;default 200)
    31 user=root                 ; (default is current user, required if root)
    32 childlogdir=/var/log/supervisord/            ; ('AUTO' child log dir, default $TEMP)
    33 
    34 [rpcinterface:supervisor]
    35 supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
    36 
    37 ; 管理的单个进程的配置,可以添加多个program
    38 [program:chatdemon]
    39 command=python /home/felinx/demos/chat/chatdemo.py
    40 autostart = true
    41 startsecs = 5
    42 user = felinx
    43 redirect_stderr = true
    44 ;这对这个program的log的配置,上面的logfile_maxbytes是supervisord本身的log配置
    45 stdout_logfile_maxbytes = 20MB
    46 stdoiut_logfile_backups = 20
    47 stdout_logfile = /var/log/supervisord/chatdemo.log
    48 
    49 ; 配置一组进程,对于类似的program可以通过这种方式添加,避免手工一个个添加
    50 [program:groupworker]
    51 command=python /home/felinx/demos/groupworker/worker.py
    52 numprocs=24
    53 process_name=%(program_name)s_%(process_num)02d
    54 autostart = true
    55 startsecs = 5
    56 user = felinx
    57 redirect_stderr = true
    58 stdout_logfile = /var/log/supervisord/groupworker.log
    59 Supervisord管理
    60 Supervisord安装完成后有两个可用的命令行supervisor和supervisorctl,命令使用解释如下:
    61 •    supervisord,初始启动Supervisord,启动、管理配置中设置的进程。
    62 •    supervisorctl stop programxxx,停止某一个进程(programxxx),programxxx为[program:chatdemon]里配置的值,这个示例就是chatdemon。
    63 •    supervisorctl start programxxx,启动某个进程
    64 •    supervisorctl restart programxxx,重启某个进程
    65 •    supervisorctl stop groupworker: ,重启所有属于名为groupworker这个分组的进程(start,restart同理)
    66 •    supervisorctl stop all,停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
    67 •    supervisorctl reload,载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。
    68 •    supervisorctl update,根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。
    69 •    注意:显示用stop停止掉的进程,用reload或者update都不会自动重启。
  • 相关阅读:
    Live Writer配置
    protobufnet 学习手记
    好的Sql语句也能提高效率(二)
    关于CodeSmith的输出问题
    [Scrum]12.29
    [scrum] 1.4
    分享 关于c#注释的规范
    [Scrum] 1.3
    分享:将XML(VS提取注释时生成)转换为Chm的一个方法
    【Scrum】2010.12.27
  • 原文地址:https://www.cnblogs.com/laifu/p/3633063.html
Copyright © 2011-2022 走看看