Форум сайта python.su
Рано или поздно появляется необходимость запускать приложение написанное на питоне как службу, отслеживать ее состояние и так далее.
Долгое время самым популярным методом было использовать supervisor.
Однако с переходом Linux дистрибутивов на systemd сделать это можно не менее просто штатными средствами. Естественно рассматривать все параметры работы с systemd в данном топике мы не станем (информации полно в сети) - но как пример рассмотрим простейший вариант когда нужно запускать скрипт, создавать PID файл и так далее:
создаем файлик appname.service
[Unit] Description=Appname API # стартовать после запуска следующих сервисов After=network.target redis.service postgresql-9.4.service # Требуемые сервисы Requires=postgresql-9.4.service redis.service # Необходимые сервисы Wants=redis.service postgresql-9.4.service [Service] # Тип запуска Type=simple # Перезапуск при сбое Restart=always # расположение PID файла PIDFile=/var/run/appname/appname.pid # Рабочий каталог WorkingDirectory=/home/username/appname # Пользователь и группа из под которых запускать User=app_user Group=app_user_group # Данный параметр необходим что бы дать права на выполнение следующих PermissionsStartOnly=true # ExecStartPre - выполнить ДО старта приложения ExecStartPre=-/usr/bin/mkdir -p /var/run/appname ExecStartPre=/usr/bin/chown -R app_user:app_user_group /var/run/appname # Запуск приложения ExecStart=/usr/bin/python3.4 appname.py & # Пауза при необходимости TimeoutSec=300 [Install] WantedBy=multi-user.target
Офлайн
только & в execstart не нужен
ещё логи через journalctl -f -u appname удобно смотреть
Отредактировано slav0nic (Март 2, 2016 10:39:12)
Офлайн
только & в execstart не нуженНу тут зависит от приложения что и как оно запускается И так далее - я для примера давал
Офлайн
А пул можно можно организовать?
Офлайн
пул чего?
Офлайн
ZerGпул процессов, обычно же, если это веб, то запускаем несколько экземпляров, ну и как в том же супервизоре основные настройки, сколько экземпляров приложения запускать на старте, сколько оставлять в резерве и т.д.
пул чего?
Офлайн
кроме Wants=, Requires= и https://www.freedesktop.org/software/systemd/man/systemd.target.html думанию ничего для твоей задачи нет, но это просто группировка юнитов и запуск зависимых
хотя вот нашёл от самого Поттеринга http://0pointer.de/blog/projects/instances.html
но выглядит страшно, лично я это делаю на уровне uwsgi
Отредактировано slav0nic (Март 2, 2016 22:49:15)
Офлайн
slav0nicПонятно, воощем это не замена. Жаль, думал одной зависимостью меньше.
хотя вот нашёл от самого Поттеринга http://0pointer.de/blog/projects/instances.html
но выглядит страшно, лично я это делаю на уровне uwsgi
Офлайн