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

    Supervisord是用Python实现的一款非常实用的进程管理工具,类似于monit(关于monit见我的博客:用monit监控系统关键进程),monit和supervisord的一个比较大的差异是supervisord管理的进程必须由supervisord来启动,monit可以管理已经在运行的程序;supervisord还要求管理的程序是非daemon程序,supervisord会帮你把它转成daemon程序,因此如果用supervisord来管理nginx的话,必须在nginx的配置文件里添加一行设置daemon off让nginx以非daemon方式启动。

    Supervisord安装

    Supervisord可以通过sudo easy_install supervisor安装,当然也可以通过Supervisord官网下载后setup.py install安装。

    Supervisord配置

    Supervisord默认的配置文件路径为/etc/supervisord.conf,通过文本编辑器修改这个文件,下面是一个示例的配置文件:

    ;/etc/supervisord.conf
    [unix_http_server]
    file = /var/run/supervisor.sock
    chmod = 0777
    chown= root:felinx
    
    [inet_http_server]
    # Web管理界面设定
    port=9001
    username = admin
    password = yourpassword
    
    [supervisorctl]
    ; 必须和'unix_http_server'里面的设定匹配
    serverurl = unix:///var/run/supervisord.sock
    
    [supervisord]
    logfile=/var/log/supervisord/supervisord.log ; (main log file;default $CWD/supervisord.log)
    logfile_maxbytes=50MB       ; (max main logfile bytes b4 rotation;default 50MB)
    logfile_backups=10          ; (num of main logfile rotation backups;default 10)
    loglevel=info               ; (log level;default info; others: debug,warn,trace)
    pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
    nodaemon=true              ; (start in foreground if true;default false)
    minfds=1024                 ; (min. avail startup file descriptors;default 1024)
    minprocs=200                ; (min. avail process descriptors;default 200)
    user=root                 ; (default is current user, required if root)
    childlogdir=/var/log/supervisord/            ; ('AUTO' child log dir, default $TEMP)
    
    [rpcinterface:supervisor]
    supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
    
    ; 管理的单个进程的配置,可以添加多个program
    [program:chatdemon]
    command=python /home/felinx/demos/chat/chatdemo.py
    autostart = true
    startsecs = 5
    user = felinx
    redirect_stderr = true
    ;这对这个program的log的配置,上面的logfile_maxbytes是supervisord本身的log配置
    stdout_logfile_maxbytes = 20MB
    stdoiut_logfile_backups = 20
    stdout_logfile = /var/log/supervisord/chatdemo.log
    
    ; 配置一组进程,对于类似的program可以通过这种方式添加,避免手工一个个添加
    [program:groupworker]
    command=python /home/felinx/demos/groupworker/worker.py
    numprocs=24
    process_name=%(program_name)s_%(process_num)02d
    autostart = true
    startsecs = 5
    user = felinx
    redirect_stderr = true
    stdout_logfile = /var/log/supervisord/groupworker.log
    

    Supervisord管理

    Supervisord安装完成后有两个可用的命令行supervisor和supervisorctl,命令使用解释如下:

    • supervisord,初始启动Supervisord,启动、管理配置中设置的进程。
    • supervisorctl stop programxxx,停止某一个进程(programxxx),programxxx为[program:chatdemon]里配置的值,这个示例就是chatdemon。
    • supervisorctl start programxxx,启动某个进程
    • supervisorctl restart programxxx,重启某个进程
    • supervisorctl stop groupworker: ,重启所有属于名为groupworker这个分组的进程(start,restart同理)
    • supervisorctl stop all,停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
    • supervisorctl reload,载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。
    • supervisorctl update,根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。
    • 注意:显示用stop停止掉的进程,用reload或者update都不会自动重启。

     

  • 相关阅读:
    Mysql索引优化
    [ExtJS5学习笔记]第六节 Extjs的类系统Class System命名规则及定义和调试
    [ExtJS5学习笔记]第五节 使用fontawesome给你的extjs5应用增加字体图标
    【翻译】Ext JS 5.0.1 中的新功能
    OpenCV——PS图层混合算法(六)
    [IDE工具配置]myeclipse 2014 专业版 安装 svn插件
    OpenCV——PS 图层混合算法 (四)
    [ExtJS5学习笔记]第四节 欢迎来到extjs5-手把手教你实现你的第一个应用
    [ExtJS5学习笔记]第三节 sencha cmd学习笔记 生成应用程序构建的内部细节
    [ExtJS5学习笔记]第二节 Sencha Cmd 学习笔记 使你的sencha cmd跑起来
  • 原文地址:https://www.cnblogs.com/xingzc/p/6612270.html
Copyright © 2011-2022 走看看