本文最后更新于:5 个月前
问题
使用supervisor管理Python程序时, 当Python程序中使用multiprocessing模块,supervisor的stop和restart指令只会杀死主进程,子进程会残留下来
解决
killasgroup可以说是专门适配了Python的multiprocessing模块,如果配置了stopasgroup=true,那么killasgroup也会默认为true,所以我们只需要配置stopasgroup=true即可,注意stopasgroup和killasgroup发送的信号类型不同。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| [group:telegram-monitor-py] programs=multiprocesstest
[program:multiprocesstest] command=/usr/bin/python38 monitor.py directory=/www/wwwroot/telegram-py/src autorestart=true startsecs=3 startretries=3 stdout_logfile=/etc/supervisord.d/log/telegram-monitor-py.out.log stderr_logfile=/etc/supervisord.d/log/telegram-monitor-py.err.log stdout_logfile_maxbytes=2MB stderr_logfile_maxbytes=2MB user=root priority=999 numprocs=1 process_name=%(process_num)02d stopsignal=QUIT stopwaitsecs=3 stopasgroup=true
|