【部署】 supervisor使用

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

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

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

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值