uWSGI не запускается с systemd под Ubuntu 16.04

Я ' m в процессе довольно болезненной миграции наших промежуточных и производственных серверов с Ubuntu 12.04 на 16.04. Я тестирую миграцию на промежуточном этапе, и она в основном работает, за исключением запуска uWSGI под systemd (ранее он отлично работал под Upstart). Это работает без проблем:

uwsgi --ini /etc/uwsgi/my_wsgi.ini

Но выполнение следующего не работает (uWSGI не запускается, но не выдает ошибку):

sudo systemctl start uwsgi

Я создал следующую службу в / etc / systemd / system / uwsgi .service:

[Unit]
Description=uWSGI Service

[Service]
ExecStart=/usr/local/bin/uwsgi --ini /etc/uwsgi/my_wsgi.ini
Restart=always
RestartSec=5
KillSignal=SIGQUIT
Type=notify
NotifyAccess=all

[Install]
WantedBy=multi-user.target

и my_wsgi.ini содержат следующее:

[uwsgi]

# Django-related settings
# the base directory (full path)
chdir           = /path/to/project/hidden
# Django's wsgi file
module          = wsgi
# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 8
# the socket (use the full path to be safe)
socket          = /path/to/socket/hidden
# ... with appropriate permissions - may be needed
chmod-socket    = 666
# clear environment on exit
vacuum          = true
# Mercilessly kill this worker if it takes longer than this time to reload
reload-mercy    = 8
# Reload workers after the specified amount of managed requests (avoid memory leaks)
max-requests    = 5000
# Every request that will take longer than the seconds specified in the harakiri timeout will be dropped and the corresponding worker is thereafter recycled.
harakiri        = 90
# Log everything and make daemon
daemonize       = /var/log/uwsgi/my.log
# use custom settings file
env             = DJANGO_SETTINGS_MODULE=settings.staging
# set pid file for starting/stopping server
pidfile         = /path/to/pid/hidden.pid
# See https://docs.newrelic.com/docs/python/python-agent-and-uwsgi
enable-threads  = true
single-interpreter = true

Запуск systemd-analysis verify uwsgi.service ничего не возвращает, а sudo journalctl возвращает следующее:

Starting uWSGI Service...
[uWSGI] getting INI configuration from /etc/uwsgi/my_wsgi.ini
Started uWSGI Service.
uwsgi.service: Service hold-off time over, scheduling restart.
Stopped uWSGI Service.
... (repeats a few times) ....

I подозреваю, что uwsgi.service: истекло время ожидания службы, запланирован перезапуск. может указывать на проблему, но я не смог ее понять.

5
задан 24 March 2017 в 23:25
1 ответ

В документации uwsgi четко сказано:

ПРИМЕЧАНИЕ: НЕ демонизируйте Императора (или мастера), если вы не знаете, что делаете !!!

К сожалению, вы демонизировали Императора, не зная, что делаете. Из вашего вопроса:

 # Регистрируем все и делаем демон
daemonize = /var/log/uwsgi/my.log
 

Проблема в том, что uwsgi поддерживает systemd, а модуль systemd сообщает systemd, что uwsgi уведомит systemd, когда uwsgi готов начать обработку запросов. По умолчанию uwsgi запускается в этом режиме в системе systemd, , если вы не укажете ему демонтировать. В этом случае uwsgi не взаимодействует с systemd. Вот почему systemd подождал некоторое время и, наконец, отказался от ожидания, пока uwsgi сообщит systemd, что он готов.

Вместо того, чтобы демонстрировать uwsgi и регистрироваться непосредственно в файле, в документации предлагается разрешить ему регистрироваться по умолчанию стандартной ошибки, и пусть systemd берет журналы и регистрирует их. Вы захотите сделать это, если в конечном итоге вам придется отправлять журнал в другое место, например, в стек ELK. Например:

[Service]
StandardError=syslog

Или вы можете войти прямо из uwsgi без демонизации.

logto = /var/log/uwsgi/my.log
4
ответ дан 3 December 2019 в 01:43

Теги

Похожие вопросы