Найти - Пользователи
Полная версия: Запуск скрипта как службы Systemd
Начало » Python для экспертов » Запуск скрипта как службы Systemd
1
ZerG
Рано или поздно появляется необходимость запускать приложение написанное на питоне как службу, отслеживать ее состояние и так далее.
Долгое время самым популярным методом было использовать 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

Сохраняем его в /etc/systemd/system
А дальше уже работаем штатным инструментом
systemctl start appname, systemctl status appname ….


Вот пожалуй и все.
slav0nic
только & в execstart не нужен
ещё логи через journalctl -f -u appname удобно смотреть
ZerG
только & в execstart не нужен
Ну тут зависит от приложения что и как оно запускается И так далее - я для примера давал
Про логи да
PooH
А пул можно можно организовать?
ZerG
пул чего?
PooH
ZerG
пул чего?
пул процессов, обычно же, если это веб, то запускаем несколько экземпляров, ну и как в том же супервизоре основные настройки, сколько экземпляров приложения запускать на старте, сколько оставлять в резерве и т.д.
slav0nic
кроме Wants=, Requires= и https://www.freedesktop.org/software/systemd/man/systemd.target.html думанию ничего для твоей задачи нет, но это просто группировка юнитов и запуск зависимых

хотя вот нашёл от самого Поттеринга http://0pointer.de/blog/projects/instances.html

но выглядит страшно, лично я это делаю на уровне uwsgi
PooH
slav0nic
хотя вот нашёл от самого Поттеринга http://0pointer.de/blog/projects/instances.html

но выглядит страшно, лично я это делаю на уровне uwsgi
Понятно, воощем это не замена. Жаль, думал одной зависимостью меньше.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB