У меня есть приложение django, которое выполняет сценарий bash. Мне нужно перезапустить сервер nginx, поэтому я запускаю /etc/init.d/nginx reload
который отлично работает. Я использовал restart uwsgi
для uwsgi, но мне нужно сделать изящная перезагрузка вместо жесткого перезапуска сервера.
Как я могу это сделать?
Я сейчас запускаю bash reload uwsgi
функционировать через subprocess.popen
. Кажется, это только перезагрузка процесса, который вызывает подпроцесс, а не все сайты, размещенные на экземпляре uwsgi. importing uwsgi
и бег uwsgi.reload
похоже, также влияет только на вызывающий процесс. Есть ли переключатель для uwsgi через python или bash, который позволяет перезапустить все процессы uwsgi
SIGHUP
Вы можете перезапустить uWSGI, отправив сигнал SIGHUP вашему процессу uWSGI следующим образом:
kill -HUP <process-id>
Если вы хотите автоматизировать это в сценарии bash, вы можете заставить uWSGI записать его идентификатор процесса, указав pidfile
вариант, например как:
--pidfile=/tmp/uwsgi.pid
Затем вы можете перезагрузить процесс:
uwsgi --reload /tmp/uwsgi.pid
сенсорная перезагрузка
Вы также можете запустить uWSGI с touch-reload
аргумент, который указывает файл, при касании которого происходит перезагрузка uWSGI:
--touch-reload=/some/file
Затем uWSGI перезагрузится, когда вы коснетесь файла:
touch /some/file
Помните, что вы можете перезагрузить uWSGI только тогда, когда он работает в режиме главного процесса, но это обычно так.
Больше информации: http://uwsgi-docs.readthedocs.io/en/latest/Management.html#reloading-the-server
Вы можете сделать это на Python
import uwsgi
uwsgi.reload()