程序员

Supervisor 的配置和使用

2018-10-11  本文已影响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 端口即可。

上一篇下一篇

猜你喜欢

热点阅读