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

systemd инициировал процесс uwsgi, отключается через некоторое время

Итак, я написал этот простой сценарий службы systemd:

[Unit]
Description=uwsgi server script

[Service]
User=web
Group=web
WorkingDirectory=/var/www/prod/myproject/releases/current
ExecStart=/bin/bash -c 'source ~/.bash_profile; workon myproject; uwsgi --ini /var/www/prod/myproject/releases/current/myproject/uwsgi_prod.ini'

[Install]
WantedBy=multi-user.target

который отлично работает - он запускается, и я вижу свои процессы uwsgi в htop.

Однако он по необъяснимым причинам отключается после 5 минут бездействия.

Если я запустил этот процесс вручную в консоли bash, выполнив от имени веб-пользователя: -

source ~/.bash_profile
workon myproject
uwsgi --ini /var/www/prod/myproject/releases/current/myproject/uwsgi_prod.ini

мой процесс не умирает после простоя.

В чем может быть проблема?

Решил после разговора с другим разработчиком на systemd канал.

Добавляя это в [Service] раздел решил проблему: -

Type=forking
PIDFile=/tmp/project.pid-3030

Причина проста. Если Type не объявлен, по умолчанию Type=simple, который ожидает, что процесс НЕ разветвляется, поэтому, когда bash выходы, systemd думает, что процесс мертв, и срывает cgroup.

Как вы отметили, вам необходимо указать Type в противном случае systemd по умолчанию Type=simple.

Однако официальные документы uWSGI по управлению uWSGI с systemd использовать Type=notify скорее, чем Type=forking потому что тогда нет необходимости указывать PIDFile.