Оформление службы в systemd из файла python

Для того чтобы служба полноценно работала, в файле python необходимо предусмотреть:

  1. Блокировку запуска копии скрипта
  2. Создание pid файла с номером процесса

Теоретически это возможно возложить и на плечи systemd, но «классически» делать это самому.

Пример создания pid файла:

import os
    # выясним id процесса т создадим pid файл
    try:
        pid=os.getpid()
        with open(f"/var/run/ocpp_{sys.argv[1]}.pid", "w") as file:
            file.write(str(pid))
    except Exception as e:
        functions.logapi.error(f"Не удалось создать PID файл {e}");

Пример блокировки запуска копии:

from filelock import FileLock,Timeout    
    lock = FileLock(f"{sys.argv[1]}.lock",0)
    try:
        lock.acquire()
    except Timeout:
        functions.logapi.error(f"инстанс {sys.argv[1]} уже запущен на сервере");
        exit(-1);
    with lock:
        functions.logapi.debug(f"включена блокировка запусков других инстансов");

Пример файла настройки службы в этом случае (xx.service):

[Unit]
Description=ocpp1

[Service]
ExecStart=python3 /home/user/цувцув/цувцу.py ocpp1
PIDFile=/var/run/ocpp_ocpp1.pid

[Install]
WantedBy=multi-user.target

В Ubuntu его необходимо положить в /etc/systemd/system и перезапустить службу:

sudo systemctl daemon-reload