В директории /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
В данном примере укажем сервису nginx работать с сетевым неймспейсом mynamespace используя опцию NetworkNamespacePath
root@veth:~# systemctl cat nginx # /lib/systemd/system/nginx.service [Unit] Description=A high performance web server and a reverse proxy server Documentation=man:nginx(8) After=network.target [Service] Type=forking PIDFile=/run/nginx.pid NetworkNamespacePath=/var/run/netns/mynamespace ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;' ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;' ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid TimeoutStopSec=5 KillMode=mixed [Install] WantedBy=multi-user.target root@veth:~#