5.7 KiB
systemd
Пользовательский сервис с доступом к X11
Для запуска пользовательских сервисов необходимо импортировать данные в переменную XDG_RUNTIME_DIR. Это можно сделать путём определения переменной в файле, который передаётся на запуск startx или xinit (например файл ~/.xinitrc)::
export XDG_RUNTIME_DIR=/run/user/$(id -u)
Пример пользовательского сервиса
Структура сервиса в качестве примера:
.
├── bin
│ └── myprogram
└── etc
└── systemd
└── user
└── myprogram.service
где bin/myprogram - исполняемый файл самой программы, которую необходимо запускать в качестве пользовательского сервиса systemd. Файл /etc/systemd/user/myprogram.service:
[Unit]
Description=myprogram
PartOf=graphical-session.target
[Service]
ExecStart=/bin/myprogram
[Install]
WantedBy=default.target
Для автозагрузки сервиса необходимо создать ссылку на сам сервис в домашней директории ~/.config/systemd/user/graphical-session.target.wants/myprogram.service:
.config
└── systemd
└── user
└── graphical-session.target.wants
└── myprogram.service -> /etc/systemd/user/myprogram.service
Делается это командой:
systemctl --user enable myprogram.service
Так как сервис запускается после входа пользователя в систему, то необходимо в файл, который передаётся на запуск startx или xinit добавить строку запсука myprogram.service (например, в файл ~/.xinitrc):
systemctl --user start myprogram.service
После чего сервис myprogram.service будет автоматически запускаться после входа пользователя в систему.
Пример пользовательского сервиса с использованием "якоря" xsession.target
Структура сервиса в качестве примера:
.
├── bin
│ └── myprogram
└── etc
└── systemd
└── user
├── myprogram.service
└── xsession.target
где bin/myprogram - исполняемый файл самой программы, которую необходимо запускать в качестве пользовательского сервиса systemd. Файл /etc/systemd/user/myprogram.service:
[Unit]
Description=myprogram
PartOf=graphical-session.target
[Service]
ExecStart=/bin/myprogram
[Install]
WantedBy=xsession.target
Файл /etc/systemd/user/xsession.target используемый в качестве "якоря", на который будут цепляться остальные сервисы:
[Unit]
Description=X session managed by systemd
BindsTo=graphical-session.target
Для автозагрузки сервиса необходимо создать ссылку на сам сервис в домашней директории ~/.config/systemd/user/graphical-session.target.wants/myprogram.service:
.config
└── systemd
└── user
└── graphical-session.target.wants
└── myprogram.service -> /etc/systemd/user/myprogram.service
Делается это командой:
systemctl --user enable myprogram.service
Так как сервис запускается после входа пользователя в систему, то необходимо в файл, который передаётся на запуск startx или xinit добавить строку запсука "якоря" xsession.target (например, в файл ~/.xinitrc):
systemctl --no-block --user start xsession.target
После чего сервис myprogram.service будет автоматически запускаться после входа пользователя в систему.
Просмотр журнала
journalctl -b -u docker
где
-b- показать сообщения с момента последней (текущей) загрузки системы-u- показать журнал с указанного сервиса (docker)
Анализ производительности загрузки системы
Вывести SVG-графику с подробным описанием того, какие системные службы были запущены в какое время, выделяя время, затраченное ими на инициализацию:
systemd-analyze plot > boot.svg
Параметры сервиса
Чтобы перед запуском службы выполнить какой либо процесс, необходимо указать ExecStartPre. Например, чтобы обеспечить задержку перед запуском службы необходимо добавить:
[Service]
ExecStartPre=/bin/sleep 30