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

45 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Python-скрипт как служба Linux
| ВАЖНО |
|:------|
| Python-скрипт работающий как служба Linux не должен быть блокирующим. В противном случае, он может привести к зависанию системы. Чтобы избежать блокировок в нем долны быть пердусмотрены механизмы асинхронного выполнения. Самое простое решение -- использовангие `sleep()` в вечных циклах. |
Чтобы превратить Python-скрипт в службу Linux, можно использовать systemd (систему инициализации, используемую в большинстве дистрибутивов Linux). Нам потребуется создать файл службы systemd, который будет запускать ваш Python-скрипт:
1. Создадим файл службы systemd. Этот файл обычно находится в каталоге `/etc/systemd/system/`. Назовем его, например, `my_python_service.service`.
2. В этом файле укажем следующее:
```ini
[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, когда должна быть запущена служба.
3. После создания файла службы systemd, надо обновить systemd, чтобы он знал о новой службе. Можно сделать это с помощью команды `systemctl daemon-reload`.
4. Теперь можно запустить службу с помощью команды `systemctl start my_python_service`.
5. Если необходимо, чтобы ваша служба автоматически запускалась при загрузке системы, то включаем её в автозапуск с помощью команды `systemctl enable my_python_service`.