美文网首页程序员
Supervisor 的配置和使用

Supervisor 的配置和使用

作者: 以前挺瘦的 | 来源:发表于2018-10-11 16:21 被阅读4次

    简介

    python 的部署一直是个问题,不过现在已经2018年了,成熟的方案很多。比较常用的就是 nginx + upervisor + virtualenv + gunicorn / uwsgi
    好处就是可以很方便控制程序启动/停止/重启,尤其你有很多的服务的时候;但滥用重启就是另一个问题了,给方便不见得就是希望你滥用。

    分为两个部分:
    supervisord: 服务端
    supervisorctl: 客户端

    client 和 server 通讯可以配置 socket 还是 http,如果是单机的话不用管这个配置,如下:

    [supervisorctl]
    serverurl=unix:///tmp/supervisor.sock ;
    

    多机的话最好配置http 方式通讯,如下:

    [supervisorctl]
    serverurl=http://127.0.0.1:9001 ;
    

    安装

    pip install supervisor
    

    注意:目前 supervisor 不支持 python3,只能用 python2,但不影响其控制python3 的服务甚至是Java PHP的服务。

    配置

    sudo mkdir /etc/supervisor
    echo_supervisord_conf > /etc/supervisor/supervisord.conf
    

    配置文件解释

    [program:工程名称]
    command=python3 run.py; 程序启动命令
    autostart=true       ; 在supervisord启动的时候也自动启动
    startsecs=10         ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
    autorestart=true     ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
    startretries=3       ; 启动失败自动重试次数,默认是3
    user=tomcat          ; 用哪个用户启动进程,默认是root
    priority=999         ; 进程启动优先级,默认999,值小的优先启动
    redirect_stderr=true ; 把stderr重定向到stdout,默认false
    stdout_logfile_maxbytes=20MB  ; stdout 日志文件大小,默认50MB
    stdout_logfile_backups = 20   ; stdout 日志文件备份数,默认是10
    ; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
    stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out
    stopasgroup=false     ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
    killasgroup=false     ;默认为false,向进程组发送kill信号,包括子进程
    

    配置实例

    假设我有个 python server,比如 flask 和 celery。

    [program:celery]
    command=celery -A application.celery worker -c 6 --beat -l info
    directory=/home/rd/username/X_server/
    autostart=true
    autorestart=true
    stopsignal=KILL
    redirect_stderr=true
    priority=1
    stopasgroup=true
    killasgroup=true
    
    [program: X_server]
    command=gunicorn -b 0.0.0.0:5000 -w 4 run:app info  --error-logfile logs/error.log --log-file logs/app.log --access-logfile logs/access.log
    directory=/home/rd/username/X_server/
    autostart=true
    autorestart=true
    stopsignal=KILL
    priority=10
    redirect_stderr=true
    

    这里配置priority,可以保证先启动celery,再启动 X_server。

    启动

    python2 /usr/bin/supervisord -c /etc/supervisor/supervisord.conf
    

    操作

    启动/停止/重启,"all" 代表所有服务。

    supervisorctl start celery
    supervisorctl stop celery
    supervisorctl restart celery
    supervisorctl start X_server
    supervisorctl stop X_server
    supervisorctl restart X_server
    supervisorctl restart all
    

    WEB 管理页

    一般用不到,不过如果服务特别多的话就是另一回事了,修改配置如下:

    [inet_http_server] 
    port=0.0.0.0:9001          ; ip & port 默认9001,占用了就改下
    username=user             
    password=123               ; 默认都没用户名和密码,需要就加上
    

    然后访问 9001 端口即可。

    相关文章

      网友评论

        本文标题:Supervisor 的配置和使用

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