В директории /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