开启单个进程配置
single_process.ini
[program:single_process]
directory= /codes/xxx
command= uvicorn single_process:app --host 0.0.0.0 --port 8888
environment=PATH= "/venvs/xxx/bin"
process_name=%(program_name)s ; process_name expr (default %(program_name)s)
autostart=true
stderr_logfile=/var/log/single_process_error.log
stdout_logfile=/var/log/single_process.log
stopasgroup=true
killasgroup=true
directory
:项目根目录environment
:指定使用的python
虚拟环境stopasgroup
与killasgroup
:都为true
时,kill
进程时,kill
掉子进程。supervisor
默认只强制kill
主进程,而主进程还没来得及向自己开启的子进程发起停止信号时,就被干掉了,导致子进程称为孤儿进程,杀都杀不掉,子进程之间又互相拉起;
开启多个进程配置
[program:multi_process]
directory = /code/xxx/
command= uvicorn multi_process:app --host 0.0.0.0 --port 8888
environment=PATH= "/venv/xxx/bin"
process_name=%(program_name)s_%(process_num)02d
numprocs=13
autostart=true
stderr_logfile=/var/log/multi_process_error.log
stdout_logfile=/var/log/multi_process.log
stopasgroup=true
killasgroup=true
可能会报错
entered FATAL state, too many start retries too quickly
原因
supervisor
中command
启动方式为后台启动,导致识别不到pid
,然后不断重启,而supervisor
本身就是后台启动守护进程。
所以,将supervisor
管理的进程启动方式daemonize
设置为False
,再次启动,成功。
supervisor新增新的进程
新增对应的ini
文件
supervisor读取管理的进程是否发生变化,并更新变化使变化生效
supervisorctl reread
supervisorctl update