Назад | Перейти на главную страницу

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

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

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

Ссылка: 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

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

Если вы не хотите терять автоматическую перезагрузку 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()

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

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

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 на предмет счетчиков процессов master / worker. Этот метод легко интегрировать с ansible или другими инструментами автоматизации, поэтому его легко использовать удаленно.

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