在HUP信号之后,gunicorn没有完全重新加载

Modified on: Thu, 15 Aug 2019 21:20:02 +0800

我正试图让一个工作的主管/ gunicorn / django设置为流浪汉。我正在使用python-watchdog在代码更改发生时尝试重启gunicorn。

我正在使用gunicorn的以下主管配置:

[program:someapp] environment=PYTHONPATH='/vagrant/libs/unmodified/django-error-capture-middleware/src:/vagrant:/home/vagrant/.virtualenvs/someapp/lib/python2.7/site-packages:/vagrant/wsgi',DJANGO_SETTINGS_MODULE=someapp.settings.vagrant command=/home/vagrant/.virtualenvs/someapp/bin/gunicorn --bind 0.0.0.0:80 --pid=/home/vagrant/.gunicorn.pid --preload --workers=1 --debug --log-level debug --error-logfile - --access-logfile - vagrant_wsgi:application user=root group=root redirect_stderr=true stdout_logfile = /vagrant/logs/gunicorn.log stderr_logfile = /vagrant/logs/gunicorn.log stdout_logfile_maxbytes=0 autostart=true autorestart=true stdout_events_enabled=true loglevel=debug

这一切都很好。看门狗也很好。但是,当我使用看门狗运行kill -HUP [pidofgunicorn]时,有时它实际上不会完全重载。有时django甚至会报告之前存在的模块丢失(我根本没有修改过sys.path)。

如果我使用看门狗运行supervisorctl restart someapp,它可以正常工作。但是,它需要更长的时间,尤其是在虚拟机实例上。

我能做些什么来让枪炮重新加载,并实际看到所做的改变?

作者:synic

最佳答案

问题是--preload参数。

第一个解决方案不使用--preload。

第二解决方案是:

# Reload a new master with new workers
kill -s USR2 $PID
# Graceful stop old workers
kill -s WINCH $OLDPID
# Graceful stop old master
kill -s QUIT $OLDPID

第三解决方案是使用https://github.com / flupke / rainbow-saddle适用于supervisord。


相关问答

添加新评论