Как установить в автозапуск python-скрипт используя systemd

Компьютерное

Иногда требуется какой-то скрипт или программу запускать как системный сервис. Это можно легко провернуть, если в вашем дистрибутиве используется система инициализации и управления демонами — systemd.

Для примера, я создам простейший python-скрипт который будет слушать 9988 порт и добавлю его в автозагрузку при старте операционной системы.

1. Простой python-scrypt

sudo nano /usr/bin/dummy_service.py

Код скрипта:

#!/usr/bin/python3
 
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("localhost", 9988))
s.listen(1)
 
while True:
    conn, addr = s.accept()
    data = conn.recv(1024)
    conn.close()
    my_function_that_handles_data(data)

2. Создание файла сервиса.

Теперь создадим файл сервиса для с помощью которого расскажем systemd что нам требуется. Файл должен иметь расширение .service и находиться в директории /lib/systemd/system/

sudo nano /lib/systemd/system/dummy.service

Добавим информацию о нашем сервисе (можете изменить местоположение скрипта и описание сервиса):

[Unit]
Description=Dummy Service
After=multi-user.target
Conflicts=getty@tty1.service

[Service]
Type=simple
ExecStart=/usr/bin/python3 /usr/bin/dummy_service.py
StandardInput=tty-force

[Install]
WantedBy=multi-user.target

Мне кажется из содержимого всё и так понятно — какая строка и за что отвечает.

3. Включение нового добавленного сервиса.

Вы добавили, наконец-то, ваш сервис в систему. теперь необходимо перезапустить демон systemctl чтобы он прочел новый файл. Каждый раз как вы вносите изменения в .service файлы вам нужно перезапустить демон.

sudo systemctl daemon-reload

Теперь включим запуск сервиса при загрузке системы, и запустим сам сервис.

sudo systemctl enable dummy.service
sudo systemctl start  dummy.service

4. Запуск/Остановка/Статус сервиса

В конце проверим статус нашего нового сервиса:

sudo systemctl status dummy.service

Изображение 1Проверим что наш python-скрипт слушает нужный нам порт:

sudo lsof -i | grep 9988

Иллюстрация 2Команды для запуска, остановки и перезапуска сервиса:

sudo systemctl stop dummy.service          #Для остановки сервиса 
sudo systemctl start dummy.service         #Для запуска сервиса
sudo systemctl restart dummy.service       #Для перезапуска сервиса

 

Оцените статью
( 1 оценка, среднее 5 из 5 )
Блог админа