Инструменты пользователя

Инструменты сайта


os:linux:systemd

Это старая версия документа!


systemd

Unit-файл

https://www.freedesktop.org/software/systemd/man/systemd.unit.html

Это скрипт запуска приложения - как его запускать, под каким пользователем и т. д. Системные юнит-файлы лежат в /lib/systemd/system (есть варианты), свои можно создавать в /etc/systemd/system. Также в /etc/systemd/system находятся ссылки на системные юнит-файлы, эти ссылки делаются с помощью команды systemctl enable. После создания юнит-файла можно управлять запуском приложения - например, добавить в автозагрузку.

Пример unit-файла:

/etc/systemd/system/multi-user.target.wants/cron.service
[Unit]
Description=Regular background program processing daemon
Documentation=man:cron(8)
After=remote-fs.target nss-user-lookup.target
 
[Service]
EnvironmentFile=-/etc/default/cron
ExecStart=/usr/sbin/cron -f $EXTRA_OPTS
IgnoreSIGPIPE=false
KillMode=process
Restart=on-failure
 
[Install]
WantedBy=multi-user.target
man systemd.unit # Справка по юнитам
cat /proc/$(pidof cron)/environ # Вывести переменные процесса cron
journalctl -u cron.service -n 10 # Лог (последние 10 записей)
journalctl -u cron.service --since yesterday # Лог со вчерашнего дня

Типы юнитов systemd

target # группирует модули
service # отвечает за запуск сервисов (служб) и поддерживает вызов интерпретаторов для исполнения пользовательских скриптов
mount # занимается монтированием файловых систем
automount # автомонтирование файловых систем, используется при обращении к точке монтирования
swap # отвечает за подключение файла подкачки
timer # запускает модули по расписанию, аналог cron
socket # запуск модуля при подключении к сокету
slice # группировка других модулей в контейнер (дерево) cgroups
device # использует реакцию на подключение какого-либо устройства
path # запуск модуля по событию доступа по конкретному пути в файловой системе

Управление процессами systemd

systemctl list-units --type service --all # просмотр всех юнитов в системе
systemctl list-unit-files --type service
systemctl start name # запустить сервис
systemctl stop name # остановить сервис
systemctl restart name # перезапустить сервис
systemctl status name # посмотреть статус сервиса
systemctl reload name # перечитать конфигурацию
systemctl daemon-reload # перечитать конфигурацию для всех
systemctl try-restart name # перезапустить, если запущен
systemctl enable name # включить автозапуск сервиса
systemctl disable name # отключить автозапуск сервиса
systemctl list-unit-files --type service # список установленных юнит-файлов сервисов

systemd-resolve

Если в /etc/resolv.conf есть заглушка nameserver 127.0.0.53, значит, работает сервис systemd-resolve.

Конфигурация systemd-resolve находится в /run/systemd/resolve/resolv.conf. Статус systemd-resolve можно проверить командой

sudo resolvectl status

https://wiki.archlinux.org/title/Systemd-resolved

Пользовательские юниты

Непривилегированный пользователь тоже может запускать службы systemd от своего имени. Юнит-файлы нужно класть в ~/.config/systemd/user. Нюанс в том, что эти службы будут работать до тех пор, пока пользователь находится в системе. Если он выходит, то службы останавливаются. Чтобы службы работали вне зависимости от сеанса, нужно выполнить команду

loginctl enable-linger $USER
 
# Проверить, включена ли эта опция
loginctl user-status
...
  Linger: yes

Пример unit-файла

[Unit]
Description=Minecraft Java server
 
[Service]
WorkingDirectory=/opt/minecraft
ExecStart=/usr/bin/java -Xmx1024M -Xms1024M -jar minecraft.jar nogui
Restart=on-failure
 
[Install]
WantedBy=multi-user.target

Управление службой такое же, нужно только добавлять параметр --user.

# После добавления юнита перечитать список демонов
systemctl --user daemon-reload
os/linux/systemd.1725888313.txt.gz · Последнее изменение: 09.09.2024 13:25 — viacheslav

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki