Вопрос или проблема
Я не могу запустить 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'.
Основные проблемы:
-
Тип службы: Требуется изменить
Type
изnotify
наsimple
илиforking
. Ваша служба uWSGI может не отправлять уведомление systemd о том, что она готова. Это может привести к тому, что systemd будет ожидать этого уведомления перезапускать службу. -
Переменная окружения: Убедитесь, что необходимые переменные окружения (например, доступ к библиотекам Anaconda) корректно настроены. Ваша конфигурация uWSGI не всегда может учитывать контекст Anaconda при запуске через systemctl.
-
Права доступа: Проверьте, имеет ли пользователь, от имени которого запускается служба, доступ к всем необходимым директориям и файлам журналов.
Возможные решения
-
Изменения в файле 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.
-
Права доступа к директориям:
Убедитесь, что директории
/var/run/uwsgi/
и лог-файлы/var/log/uwsgi.log
имеют правильные разрешения, и пользователь, под которым запускается systemd, имеет к ним доступ. -
Перезагрузка демона systemd:
После внесения изменений перезагрузите systemd, затем запустите вашу службу снова:
sudo systemctl daemon-reload sudo systemctl start uwsgi.service sudo systemctl status uwsgi.service
-
Проверка логов:
Если служба все еще не запускается, посмотрите дополнительные журналы:
journalctl -u uwsgi.service
Это позволит вам получить более детальные сообщения об ошибках, если они присутствуют.
Заключение
Следуя указанным шагам, вы сможете устранить проблему с запуском службы uWSGI через systemctl. Важно помнить о конфигурации файла службы, различных переменных окружения и правах доступа, чтобы обеспечить корректное взаимодействие uWSGI и systemd. Если возникнут дальнейшие проблемы, обязательно проверяйте журналы для получения более детальной информации о сбоях.