Проблема с запуском веб-сервиса Gunicorn с использованием Systemd

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

У меня проблема с запуском веб-службы Gunicorn с использованием Systemd.

Вот файлы, которые я создал для выполнения:

Файл оболочки (/home/ubuntu/mata.sh):

#!/usr/bin/env bash

cd /home/ubuntu/workspace/test-api
/home/ubuntu/workspace/mata_venv/bin/gunicorn --workers=4 app:app --bind 0.0.0.0:xxxx

Вот мой файл .service (/lib/systemd/system/mata.service):

[Unit]
Description=Служба тестового API
After=multi-user.target
[email protected]

[Service]
User=ubuntu
Type=simple
ExecStart=/home/ubuntu/mata.sh
StandardInput=tty-force

[Install]
WantedBy=multi-user.target

Запуск скрипта оболочки самостоятельно работает хорошо, но при выполнении systemctl status mata.service я получаю следующее сообщение:

Запущена служба тестового API
mata.service: Главный процесс вышел, код=exited, статус=216/GROUP
mata.service: Юнит вошел в состояние ошибки.
mata.service: Не удалось с результатом 'exit-code'.

Есть идеи?

У вас нет службы “Type=simple”, у вас есть служба форкинга, так как основной процесс, который вас интересует, – это процесс “gunicorn”, а не “mata.sh”.

Для службы типа simple измените раздел [Service] на:

[Service]
User=ubuntu
Type=simple
WorkingDirectory=/home/ubuntu/workspace/test-api
ExecStart=/home/ubuntu/workspace/mata_venv/bin/gunicorn --workers=4 app:app --bind 0.0.0.0:xxxx
StandardInput=tty-force

… где я импортировал команду cd с директивой WorkingDirectory.

Или сделайте это службой форкинга с:

[Service]
User=ubuntu
Type=forking
ExecStart=/home/ubuntu/mata.sh
StandardInput=tty-force

Вы можете предпочесть решение типа forking, если, как кажется, процесс gunicorn запускает подпроцессы (workers=4).

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

Проблема, с которой вы столкнулись, связана с неправильной конфигурацией вашего файла service для Gunicorn. Давайте разберем, как правильно настроить запуск вашего веб-сервиса с помощью Systemd.

Основные моменты

  1. Тип сервиса: Как было замечено, вы используете Type=simple. Однако поскольку Gunicorn запускает дочерние процессы, правильнее будет использовать Type=forking или Type=simple с корректной настройкой.

  2. Рабочая директория: Вместо использования команды cd в вашем скрипте, вы можете указать рабочую директорию непосредственно в файле сервиса с помощью директивы WorkingDirectory.

Вариант 1: Использование Type=simple

В этом варианте мы будем использовать Type=simple и указание рабочей директории в файле сервиса.

[Unit]
Description=Test API Service
After=multi-user.target

[Service]
User=ubuntu
Type=simple
WorkingDirectory=/home/ubuntu/workspace/test-api
ExecStart=/home/ubuntu/workspace/mata_venv/bin/gunicorn --workers=4 app:app --bind 0.0.0.0:xxxx
StandardInput=tty-force

[Install]
WantedBy=multi-user.target

Вариант 2: Использование Type=forking

Если вы все-таки хотите использовать скрипт запуска и убедиться, что Gunicorn работает как фоновый процесс, вы можете настроить файл сервиса следующим образом:

[Unit]
Description=Test API Service
After=multi-user.target

[Service]
User=ubuntu
Type=forking
ExecStart=/home/ubuntu/mata.sh
StandardInput=tty-force

[Install]
WantedBy=multi-user.target

Дополнительные шаги

После внесения изменений в .service файл, не забудьте выполнить следующие команды, чтобы перезагрузить конфигурацию systemd и запустить ваш сервис:

sudo systemctl daemon-reload
sudo systemctl start mata.service
sudo systemctl enable mata.service

Проверка статуса

Вы можете проверить статус вашего сервиса, используя следующую команду:

sudo systemctl status mata.service

Это должно показать вам, что сервис работает без ошибок. Если возникнут дополнительные проблемы, вы можете просмотреть журналы для более подробной информации:

journalctl -u mata.service -f

Заключение

С помощью этих настроек ваш Gunicorn сервис должен корректно запускаться и работать под управлением Systemd. Убедитесь, что порты и другие параметры настроены в соответствии с вашими требованиями. Если у вас все еще возникают трудности, проверьте конфигурацию вашего веб-приложения и любые другие зависимости.

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

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