supervisor安装与基本配置
让supervisor管理uwsgi、gunicorn、celery等进程,可以在uwsgi、gunicorn、celery等发生意外的情况下,会自动的重启。
1. supervisor的安装:在系统级别的python环境下pip install supervisor。
2. 在项目的根目录下创建一个文件叫做supervisor.conf。内容如下:
[supervisord]
#log的级别
loglevel=info
#使用supervisorctl的配置
[inet_http_server]
# supervisor的服务器
port = :9001
#用户名和密码
username = admin
password = admin
[supervisorctl]
#使用supervisorctl登录的地址和端口号
serverurl = http://127.0.0.1:9001
#登录supervisorctl的用户名和密码
username = admin
password = admin
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
# 以上这写可以不用配置(有的默认注释,有的有默认值,不用动即可)
# supervisor的程序名字(这个域是新添加的,可以添加多个)
[program:app]
# supervisor执行的命令
command=uwsgi –ini uwsgi.ini
#项目的目录
directory = /srv/django
#开始的时候等待多少秒
startsecs=0
#停止的时候等待多少秒
stopwaitsecs=0
#自动开始
autostart=true
#程序挂了后自动重启
autorestart=true
#输出的log文件
stdout_logfile=/srv/django/log/supervisord.log
#输出的错误文件
stderr_logfile=/srv/django/log/supervisord.err
然后使用命令supervisord -c supervisor.conf运行就可以了。
以后如果想要启动uwsgi,就可以通过命令supervisorctl -c supervisor.conf`进入到管理控制台,然后可以执行相关的命令进行管理:
* status # 查看状态
* start program_name #启动程序
* restart program_name #重新启动程序
* stop program_name # 关闭程序
* reload # 重新加载配置文件
* quit # 退出控制台
注意:
1、先启动supervisor服务端:supervisord -c supervisor.conf
2、然后再启动控制台:supervisorctl -c supervisor.conf
supervisor命令使用
Supervisord管理 Supervidor安装完成以后有两个可用的命令行supervisord和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 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。
注意:
1、显示用stop停止掉的进程,用reload不会自动重启。
2、可以使用--help查看命令更多的用法,启动时遇到配置文件没有放到默认路径(默认路径为/etc/supervisor.conf),必须使用-c 参数指定配置文件路径来启动
supervisor管理celery
supervisor管理worker配置说明
# stopasgroup=true 这个参数必须有,否重celery的子进程不能全部结束
[program:celery_worker]
command=celery -A app.celery worker -l info -Q default,q1 --concurrency=10 -n node1-worker-%(process_num)s@%%h ; 启动命令
process_name=%(program_name)s-%(process_num)d ; 进程名
numprocs=3 ; 进程数量
directory=/Users/aaa/PycharmProjects/flask_test ; 工作路径
;umask=022 ; umask for process (default None)
priority=999 ; 优先级。优先级低,最先启动,关闭的时候最后关闭
autostart=true ; supervisor启动后自动启动
startsecs=1 ; 启动多少秒后是running认为启动成功
;startretries=3 ; 最大启动重试次数 (default 3)
autorestart=true ; 子进程挂掉自动重启 (def: unexpected)
;exitcodes=0 ; 'expected' exit codes used with autorestart (default 0)
stopsignal=TERM ; 进程停止信号,停止celery worker时使用TERM, (TERM, HUP, INT, QUIT, KILL, USR1, or USR2)
stopwaitsecs=30 ; 等待停止最大时间,超过此时间会强制kill (default 10)
stopasgroup=true ; 停掉子进程的子进程(保证不会出现孤儿进程),
;killasgroup=true ; kill进程及其子进程,直接发送KILL信号不会等待进程退出
;user=chrism ; 管理子进程的用户
redirect_stderr=true ; redirect 日志 stderr to stdout
stdout_logfile=/Users/aaa/PycharmProjects/flask_test/log/node1/celery-worker-1.log ; 日志
stdout_logfile_maxbytes=50MB ; 单个日志文件最大大小 (default 50MB)
stdout_logfile_backups=20 ; 日志文件数量 (default 10)
;stdout_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0)
;stdout_events_enabled=false ; emit events on stdout writes (default false)
;stdout_syslog=false ; send stdout to syslog with process name (default false)
;stderr_logfile=/Users/aaa/PycharmProjects/flask_test/log/default/celery_err.log ; 错误日志
;stderr_logfile_maxbytes=10MB ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups=10 ; # of stderr logfile backups (0 means none, default 10)
;stderr_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0)
;stderr_events_enabled=false ; emit events on stderpidr writes (default false)
;stderr_syslog=false ; send stderr to syslog with process name (default false)
environment=PATH="/Users/aaa/anaconda3/envs/flask_test/bin" ; 环境变量,子进程间不共享
;serverurl=AUTO ; override serverurl computation (childutils)
参考:
https://www.jianshu.com/p/eebefeb92cf0
https://www.jianshu.com/p/0b9054b33db3

本文详细介绍如何使用Supervisor管理uwsgi、gunicorn、celery等进程,包括安装步骤、配置文件示例及常用命令介绍,确保应用稳定运行。
1775





