From 4f8ac49905218cd13f09937ecb3da3fa5be2d1e3 Mon Sep 17 00:00:00 2001 From: erjemin Date: Tue, 12 Nov 2024 10:37:10 +0300 Subject: [PATCH] =?UTF-8?q?Python-=D1=81=D0=BA=D1=80=D0=B8=D0=BF=D1=82=20?= =?UTF-8?q?=D0=BA=D0=B0=D0=BA=20=D1=81=D0=BB=D1=83=D0=B6=D0=B1=D0=B0=20Lin?= =?UTF-8?q?ux?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 ++- python/python_as_service.md | 43 +++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 python/python_as_service.md diff --git a/README.md b/README.md index e2d818e..edbf1ba 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,8 @@ * [Развертывание прокси базе Shadowsocks (сервер и клиент)](docker/docker-shadowsocks.md) ## 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 * [Установка Docker и Docker Compose](raspberry-and-orange-pi/install-docker-compose.md) diff --git a/python/python_as_service.md b/python/python_as_service.md new file mode 100644 index 0000000..cfba7b8 --- /dev/null +++ b/python/python_as_service.md @@ -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`.