我正在通过主管在 schroot 会话中运行 Gunicorn 服务器。我的问题是,当使用“supervisorctl stop”停止服务时,服务并没有完全停止。
这是控制我的服务器的脚本(简化),它在前台运行 gunicorn:
# gunicorn.sh
schroot -c gunicorn -r -- bash -c "gunicorn --workers=1 myapp.wsgi:application"
这是我运行此脚本的主管配置:
[program:gunicorn]
command=/home/test/gunicorn.sh
stderr_logfile=/var/log/gunicorn.err.log
stdout_logfile=/var/log/gunicorn.out.log
当我通过 "supervisorctl start" 启动服务时,我的进程树如下所示:
supervisord(7175)---gunicorn.sh(8061)---schroot(8067)---gunicorn(8068)---gunicorn(8073)---{gunicorn}(8078)
现在,当我使用“supervisorctl stop”停止服务时,相应的主管进程及其直接子进程 gunicorn.sh 将被终止。但是 schroot 进程本身继续存在,现在是 init 进程的子进程:
schroot(8067)---gunicorn(8068)---gunicorn(8073)---{gunicorn}(8078)
这整个行为似乎与 schroot 和 gunicorn 的工作方式有关。
如何让主管正确停止我的 schroot 托管进程?