Как сделать перезагрузку uWSGI при изменении скрипта Python?

38

Не могу вспомнить, где, но я читал, что uWSGI может перезагрузить себя, как сервер разработки Django, когда сценарий проекта изменен. Я не могу найти это ни в документах , ни в интернете. Как я могу это сделать?

Я использую Ubuntu 12.04 на своих рабочих машинах и Debian Squeeze на рабочем и производственном серверах, Django 1.4 и uWSGI 1.2.

culebrón
источник

Ответы:

39

Ссылка: http://projects.unbit.it/uwsgi/wiki/Management

Если вы запустили uwsgi с --touch-reload=/path/to/special/file/usually/the.iniопцией, перезагрузите ваш uWSGI - это просто сенсорная перезагрузка этого файла с

touch /path/to/special/file/usually/the.ini

И если вам нужна возможность «автозагрузки», вот совет, который это делает: http://projects.unbit.it/uwsgi/wiki/TipsAndTricks#uWSGIdjangoautoreloadmode

Кельвин Ченг
источник
35

В py-autoreload=Nновых версиях есть опция. Просто установите Nчастоту (в секундах) проверок (3 - это хорошее значение).

Роберто
источник
12
"использовать только в разработке" в соответствии с документами uwsgi
scytale
4
выглядит как touch-reload = / some / file - более безопасный вариант
scytale
10

Если вы не хотите терять автозагрузку django, зарегистрируйте этот метод перезагрузки (то есть: в settings.py):

import uwsgi
from uwsgidecorators import timer
from django.utils import autoreload

@timer(3)
def change_code_gracefull_reload(sig):
    if autoreload.code_changed():
        uwsgi.reload()

Теперь, если вы измените свой код, он будет перезагружен.

Автор: Симоне Федеричи

BorisHajduk
источник
1
Это сработало отлично. Также добавлено условие, так что это вызывается только в среде разработки.
2upmedia,
0

uwsgi также разрешает перезапуск с использованием kill SIGNAL. Я использую это как ниже:

# ps -efa | grep uwsgi | grep prod
app  13390 13383  0 07:40 ?        00:00:00 /usr/local/bin/uwsgi --ini /etc/uwsgi/apps-enabled/app_prod.ini
app  13417 13390  0 07:40 ?        00:00:00 /usr/local/bin/uwsgi --ini /etc/uwsgi/apps-enabled/app_prod.ini
app  13419 13390  0 07:40 ?        00:00:00 /usr/local/bin/uwsgi --ini /etc/uwsgi/apps-enabled/app_prod.ini
# kill -HUP 13390

Если вы запустите ту же команду, вы увидите, что pid дочерних процессов будет изменен, так как они будут заново созданы мастером. Также проверьте конфигурацию uwsgi на счетчик основных / рабочих процессов. Этот метод легко интегрируется с ANSILE или другими инструментами автоматизации, поэтому его легко использовать для удаленного использования.

Это не требует, чтобы ваш исходный процесс запускался с --touch-reload.

mrtipale
источник