doc_memo/python/python_as_service.md
2024-11-12 10:39:26 +03:00

3.1 KiB
Raw Blame History

Python-скрипт как служба Linux

ВАЖНО
Python-скрипт работающий как служба Linux не должен быть блокирующим. В противном случае, он может привести к зависанию системы. Чтобы избежать блокировок в нем долны быть пердусмотрены механизмы асинхронного выполнения. Самое простое решение -- использовангие sleep() в вечных циклах.

Чтобы превратить Python-скрипт в службу Linux, можно использовать systemd (систему инициализации, используемую в большинстве дистрибутивов Linux). Нам потребуется создать файл службы systemd, который будет запускать ваш Python-скрипт:

  1. Создадим файл службы systemd. Этот файл обычно находится в каталоге /etc/systemd/system/. Назовем его, например, my_python_service.service.

  2. В этом файле укажем следующее:

[Unit]
Description = My_Python_Service
After = network.target

[Service]
ExecStart = /usr/bin/python3 /path/to/your/python/script.py
Restart = always
User = username
Group = groupname
Environment = NAME=value

[Install]
WantedBy=multi-user.target

Где:

  • Description -- описание службы.
  • After -- указание systemd запускать службу после того, как сеть будет доступна.
  • ExecStart -- команда, которую systemd выполнит для запуска вашей службы. Соответственно в ней указание какой Python запускать (и где он находится) и полный путь к нашему Python-скрипту.
  • Restart -- указание systemd перезапустить службу, если она упадет.
  • User и Group -- имя пользователя и группы, от имени которых будет запущена служба.
  • Environment -- переменные окружения, которые будут установлены при запуске службы.
  • WantedBy -- это указание systemd, когда должна быть запущена служба.
  1. После создания файла службы systemd, надо обновить systemd, чтобы он знал о новой службе. Можно сделать это с помощью команды systemctl daemon-reload.

  2. Теперь можно запустить службу с помощью команды systemctl start my_python_service.

  3. Если необходимо, чтобы ваша служба автоматически запускалась при загрузке системы, то включаем её в автозапуск с помощью команды systemctl enable my_python_service.