美文网首页
使用 supervisor 管理进程

使用 supervisor 管理进程

作者: Pokerpoke | 来源:发表于2017-05-30 10:03 被阅读0次

    使用 supervisor 管理进程

    Supervisor是一个用 Python写的进程管理工具,可以很方便的用来启动、重启、关闭进程。除了对单个进程的控制,还可以同时启动、关闭多个进程,可以很方便的控制那些需要长期运行的进程,比如需要在服务器上长期运行的爬虫之类,会在程序出错以后自动重启。

    1.安装

    ubuntu下apt安装

    sudo apt install supervisor
    

    pip安装方式

    sudo pip install supervisor
    

    2.配置

    创建配置文件
    supervisor提供了一个快速产生配置文件的方法

    echo_supervisord_conf > /etc/supervisord.conf
    

    如果没有root权限可以使用

    echo_supervisord_conf > supervisord.conf
    

    在当前目录产生,然后用supervisor -c supervisord.conf来启动服务
    查看 supervisord 是否在运行:

    ps -aux | grep supervisord
    

    3.应用配置

    至此,supervisor已经安装完成,下面需要将应用添加进去,可以在刚刚的生成文件中直接添加命令,但是不推荐这么做,推荐使用以下的做法。
    supervisor.conf中取消注释掉以下命令(一般位于结尾)

    ;[include]
    ;files = relative/directory/*.ini
    

    改为

    [include]
    files = /etc/supervisor/*.ini
    

    /etc目录下创建supervisor文件夹,在其下建立program.ini

    [program:serialrecv]
    directory = /home/jiang/program ; 程序的启动目录
    command = python serialrecv.py  ; 运行的指令
    autostart = true     ; 在 supervisord 启动的时候也自动启动
    startsecs = 5        ; 启动 5 秒后没有异常退出,就当作已经正常启动了
    autorestart = true   ; 程序异常退出后自动重启
    startretries = 3     ; 启动失败自动重试次数,默认是 3
    user = root          ; 用哪个用户启动
    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
    

    启动supervisor

    sudo supervisord
    

    监控应用运行情况

    sudo supervisorctl
    

    显示如下界面

    supdervisor>
    

    运行status可以看到应用运行状态,start <program name>可以启动应用,stop <program name>停止应用,start allstop all可以启动和停止所有应用。

    4.问题

    1.可能会遇到unix:///tmp/supervisor.sock not found,重新启动supervisordsudo supervisord即可
    2.无法开机启动
    /etc/rc.local添加启动命令sudo supervisordexit 0之前即可。

    相关文章

      网友评论

          本文标题:使用 supervisor 管理进程

          本文链接:https://www.haomeiwen.com/subject/aztrfxtx.html