Уведомления

Группа в Telegram: @pythonsu

#1 Март 2, 2016 09:53:02

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Запуск скрипта как службы Systemd

Рано или поздно появляется необходимость запускать приложение написанное на питоне как службу, отслеживать ее состояние и так далее.
Долгое время самым популярным методом было использовать 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 ….


Вот пожалуй и все.



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#2 Март 2, 2016 10:37:56

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Запуск скрипта как службы Systemd

только & в execstart не нужен
ещё логи через journalctl -f -u appname удобно смотреть

Отредактировано slav0nic (Март 2, 2016 10:39:12)

Офлайн

#3 Март 2, 2016 11:02:25

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Запуск скрипта как службы Systemd

только & в execstart не нужен
Ну тут зависит от приложения что и как оно запускается И так далее - я для примера давал
Про логи да



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#4 Март 2, 2016 16:10:54

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Запуск скрипта как службы Systemd

А пул можно можно организовать?



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#5 Март 2, 2016 16:19:38

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Запуск скрипта как службы Systemd

пул чего?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#6 Март 2, 2016 18:14:20

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Запуск скрипта как службы Systemd

ZerG
пул чего?
пул процессов, обычно же, если это веб, то запускаем несколько экземпляров, ну и как в том же супервизоре основные настройки, сколько экземпляров приложения запускать на старте, сколько оставлять в резерве и т.д.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#7 Март 2, 2016 22:44:51

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Запуск скрипта как службы Systemd

кроме 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)

Офлайн

#8 Март 3, 2016 05:49:55

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Запуск скрипта как службы Systemd

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

но выглядит страшно, лично я это делаю на уровне uwsgi
Понятно, воощем это не замена. Жаль, думал одной зависимостью меньше.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version