使用supervisor管理进程

开启单个进程配置

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虚拟环境
  • stopasgroupkillasgroup:都为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

原因

supervisorcommand启动方式为后台启动,导致识别不到pid,然后不断重启,而supervisor本身就是后台启动守护进程。
所以,将supervisor管理的进程启动方式daemonize设置为False,再次启动,成功。

supervisor新增新的进程

新增对应的ini文件

supervisor读取管理的进程是否发生变化,并更新变化使变化生效

supervisorctl reread
supervisorctl update
  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hzw0510

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值