# 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`.