Не запущен uwsgi через systemctl

Вопрос или проблема

Я не могу запустить uwsgi с помощью systemctl.

Мой журнал ошибок ниже.

$sudo systemctl status uwsgi.service
● uwsgi.service - uWSGI
   Loaded: загружено (/etc/systemd/system/uwsgi.service; включено; предустановка продавца: включено)
   Active: неудача (Результат: протокол) с чт, 23 апр 2020 03:13:02 JST; 6 сек. назад
 Main PID: 24676 (код=вышел, статус=0/УСПЕХ)
   Status: "инициализация uWSGI"

23 апр 03:13:02 ip-172-17-1-78 systemd[1]: uwsgi.service: Время удержания службы истекло, запланирован перезапуск.
23 апр 03:13:02 ip-172-17-1-78 systemd[1]: uwsgi.service: Запланирована задача перезапуска, счетчик перезапусков 5.
23 апр 03:13:02 ip-172-17-1-78 systemd[1]: Остановка uWSGI.
23 апр 03:13:02 ip-172-17-1-78 systemd[1]: uwsgi.service: Запрос на запуск повторен слишком быстро.
23 апр 03:13:02 ip-172-17-1-78 systemd[1]: uwsgi.service: Не удалось с результатом 'протокол'.
23 апр 03:13:02 ip-172-17-1-78 systemd[1]: Не удалось запустить uWSGI.

Я искал в Google и нашел, что эта ошибка может быть связана с anaconda.

Я использую uwsgi в окружении conda.
/home/ubuntu/anaconda3/envs/py37/bin/uwsgi

uwsgi.service

[Unit]
Description = uWSGI
After = syslog.target

[Service]
ExecStart = /home/ubuntu/anaconda3/envs/py37/bin/uwsgi --ini /var/www/html/myapp/uwsgi.ini
Restart=всегда
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=все

[Install]
WantedBy=multi-user.target

Я использую командную строку /home/ubuntu/anaconda3/envs/py37/bin/uwsgi --ini /var/www/html/myapp/uwsgi.ini.

Это работает.

Однако, как я могу это исправить??

Мой uwsgi.ini ниже

[uwsgi]
chdir=/var/www/html/myapp/current
module=myapp.wsgi
env DJANGO_SETTINGS_MODULE=myapp.settings
http = 0.0.0.0:8008
processes = 4
threads = 1
master = 1
max-requests = 100
max-requests-delta = 5
pythonpath = /home/ubuntu/anaconda3/envs/py37/lib/python3.7/site-packages
pythonhome = /home/ubuntu/anaconda3/envs/py37/bin
harakiri = 280
daemonize = /var/log/uwsgi.log
log-reopen = true
log-maxsize = 8000000
logfile-chown = включено
logfile-chmod = 644 
pidfile = /var/run/uwsgi/uwsgi.pid
stats = /var/run/uWSGI/projectname.stats.sock
memory-report = true

Обновление:

Type=notify

на

Type=Forking

.

Ответ или решение

Проблема, с которой вы столкнулись при запуске uWSGI через systemctl, указывает на сбой службы с результатом «протокол». Несмотря на то, что uWSGI успешно запускается из командной строки без каких-либо проблем, система systemd не может корректно управлять службой из-за настройки вашего файла службы. Давайте рассмотрим, как можно исправить эту ситуацию.

Анализ проблемы

Ваш журнал ошибок показывает следующее:

Active: failed (Result: protocol) since Thu 2020-04-23 03:13:02 JST; 6s ago
...
Failed with result 'protocol'.

Основные проблемы:

  1. Тип службы: Требуется изменить Type из notify на simple или forking. Ваша служба uWSGI может не отправлять уведомление systemd о том, что она готова. Это может привести к тому, что systemd будет ожидать этого уведомления перезапускать службу.

  2. Переменная окружения: Убедитесь, что необходимые переменные окружения (например, доступ к библиотекам Anaconda) корректно настроены. Ваша конфигурация uWSGI не всегда может учитывать контекст Anaconda при запуске через systemctl.

  3. Права доступа: Проверьте, имеет ли пользователь, от имени которого запускается служба, доступ к всем необходимым директориям и файлам журналов.

Возможные решения

  1. Изменения в файле uWSGI.service:

    Откройте файл /etc/systemd/system/uwsgi.service и внесите следующие изменения:

    [Service]
    ExecStart = /home/ubuntu/anaconda3/envs/py37/bin/uwsgi --ini /var/www/html/myapp/uwsgi.ini
    Restart=always
    KillSignal=SIGQUIT
    Type=simple  ; или Type=forking, если у вас процесс порождает дочерние процессы
    StandardError=syslog
    Environment="PATH=/home/ubuntu/anaconda3/envs/py37/bin"
    Environment="PYTHONPATH=/home/ubuntu/anaconda3/envs/py37/lib/python3.7/site-packages"
    NotifyAccess=all
    • Type=simple: Это изменение указывает systemd, что процесс запускается и работает непосредственно, без уведомлений о готовности.
    • Добавление переменных окружения PATH и PYTHONPATH поможет системе правильно находить исполняемые файлы и библиотеки Anaconda.
  2. Права доступа к директориям:

    Убедитесь, что директории /var/run/uwsgi/ и лог-файлы /var/log/uwsgi.log имеют правильные разрешения, и пользователь, под которым запускается systemd, имеет к ним доступ.

  3. Перезагрузка демона systemd:

    После внесения изменений перезагрузите systemd, затем запустите вашу службу снова:

    sudo systemctl daemon-reload
    sudo systemctl start uwsgi.service
    sudo systemctl status uwsgi.service
  4. Проверка логов:

    Если служба все еще не запускается, посмотрите дополнительные журналы:

    journalctl -u uwsgi.service

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

Заключение

Следуя указанным шагам, вы сможете устранить проблему с запуском службы uWSGI через systemctl. Важно помнить о конфигурации файла службы, различных переменных окружения и правах доступа, чтобы обеспечить корректное взаимодействие uWSGI и systemd. Если возникнут дальнейшие проблемы, обязательно проверяйте журналы для получения более детальной информации о сбоях.

Оцените материал
Добавить комментарий

Капча загружается...