Systemd

В директории /etc/systemd/system/ или /lib/systemd/system/ создадим юнита my-unit.service с его содержимым

    [Unit]
    Description=This-name
    After=syslog.target
    After=network.target
    
    [Service]
    Type=simple
    User=bednyakov
    WorkingDirectory=/path/to/workdir/
    ExecStart=/usr/bin/python3.8 /path/to/app.py
    RestartSec=10
    Restart=always
     
    [Install]
    WantedBy=multi-user.target

Далее нам необходимо перезагрузить конфигурации сервисов

    bednyakov@ubuntu:~$ sudo systemctl daemon-reload

Запустим нашего демона

    bednyakov@ubuntu:~$ sudo systemctl enable my-unit.service
    bednyakov@ubuntu:~$ sudo systemctl start my-unit.service

Проверим его состояние.
Вывод должен быть примерно следующим:

    bednyakov@ubuntu:~$ sudo systemctl status my-unit.service 
     my-unit.service - This-name
     Loaded: loaded (/lib/systemd/system/my-unit.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-09-25 15:09:53 MSK; 24h ago
   Main PID: 148464 (python3.8)
      Tasks: 3 (limit: 4496)
     Memory: 22.1M
     CGroup: /system.slice/my-unit.service
             └─148464 /usr/bin/python3.8 /path/to/app.py

сен 25 15:09:53 ubuntu systemd[1]: Started This-name.

Посмотреть список всех модулей, о которых знает systemd

    systemctl list-units

По умолчанию показывает только активные, чтобы посмотреть все, необходимо добавить параметр --all.
Можно задать фильтры по типу:

    systemctl list-units --all --state=inactive
    systemctl list-units --type=service

Для просмотра содержимого сервиса:

    systemctl cat my-unit.service

Для его редактирования

    systemctl edit my-unit.service

Чтобы отключить запуск службы, ее можно "замаскировать"

    sudo systemctl mask my-unit.service

В этом случае службу не получится запустить; чтобы сделать доступной, нужно использовать unmask