Python-скрипт как служба Linux
This commit is contained in:
parent
d80ad3d09c
commit
4f8ac49905
@ -8,7 +8,8 @@
|
|||||||
* [Развертывание прокси базе Shadowsocks (сервер и клиент)](docker/docker-shadowsocks.md)
|
* [Развертывание прокси базе Shadowsocks (сервер и клиент)](docker/docker-shadowsocks.md)
|
||||||
|
|
||||||
## Python
|
## Python
|
||||||
* [Устранение проблем при установке mysqlclient (подключение к MySQL/MariaDB)](python/python-mysql.md)
|
* [Устранение проблем при установке Python-коннектора mysqlclient (MySQL/MariaDB)](python/python-mysql.md)
|
||||||
|
* [Python-скрипт как служба Linux](python/python_as_service.md)
|
||||||
|
|
||||||
## Raspberry Pi / Orange Pi
|
## Raspberry Pi / Orange Pi
|
||||||
* [Установка Docker и Docker Compose](raspberry-and-orange-pi/install-docker-compose.md)
|
* [Установка Docker и Docker Compose](raspberry-and-orange-pi/install-docker-compose.md)
|
||||||
|
43
python/python_as_service.md
Normal file
43
python/python_as_service.md
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# 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`.
|
Loading…
Reference in New Issue
Block a user