systemd (продолжение)
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
systemd (продолжение)
Это продолжение давней темы systemd - ночной кошмар для пользователя - тянущейся ещё с 2012 года...
Но нельзя так долго, 11 лет, продолжать одну тему
Тогда это был "ночной кошмар" (кто застал), а теперь это "реальность от которой никуда не денешься".
Но нельзя так долго, 11 лет, продолжать одну тему
Тогда это был "ночной кошмар" (кто застал), а теперь это "реальность от которой никуда не денешься".
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
systemd (продолжение)
Самое главное: самое полное описание systemd здесь: systemd для администраторов:
И те опции status, которые обеспечивают сразу и полный вывод (постоянно требуется!):Lennart Poettering (автор)*
Сергей Пташник (русский перевод)†
Данный документ доступен на условиях лицензии CC-BY-SA 3.0 Unported
28 октября 2017 г.
Код: Выделить всё
olej@277938:~$ systemctl status --no-pager --full danted
● danted.service - SOCKS (v4 and v5) proxy daemon (danted)
Loaded: loaded (/lib/systemd/system/danted.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Wed 2023-03-29 11:13:27 MSK; 1h 20min ago
Docs: man:danted(8)
man:danted.conf(5)
Process: 545 ExecStartPre=/bin/sh -c uid=`sed -n -e "s/[[:space:]]//g" -e "s/#.*//" -e "/^user\.privileged/{s/[^:]*://p;q;}" /etc/danted.conf`; if [ -n "$uid" ]; then touch /var/run/danted.pid; chown $uid /var/run/danted.pid; fi (code=exited, status=0/SUCCESS)
Process: 562 ExecStart=/usr/sbin/danted (code=exited, status=1/FAILURE)
Main PID: 562 (code=exited, status=1/FAILURE)
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
systemd (продолжение)
Но главный повод для новой темы: как писать сервисные файлы, юниты ... в /lib/systemd/system + /etc/init.d (старого стиля) + /etc/systemd/system ... куда ещё они их втулят?
Что такое сервисный файл?
Параметры сервисного файлаSep 16, 2021
Это всё вызвано разборками с miredo: IPv6 (2)Sep 16, 2021
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
systemd (продолжение)
Новинка с некоторых времён ... systemd user services and systemctl --user
18 Feb 2021
Если мы удалим службу systemd в ~/.config/systemd/user, она будет воспринята systemd как пользовательская служба. Большим преимуществом является то, что конкретный пользователь теперь управляет этой службой без необходимости использования sudo.
Код: Выделить всё
olej@R420:~$ ls /usr/lib/systemd/user/
app.slice gpg-agent.service org.gnome.SettingsDaemon.PrintNotifications.service printer.target
at-spi-dbus-bus.service gpg-agent.socket org.gnome.SettingsDaemon.PrintNotifications.target pulseaudio.service
background.slice gpg-agent-ssh.socket org.gnome.SettingsDaemon.Rfkill.service pulseaudio.socket
basic.target graphical-session-pre.target org.gnome.SettingsDaemon.Rfkill.target pulseaudio-x11.service
blueman-applet.service graphical-session-pre.target.wants org.gnome.SettingsDaemon.ScreensaverProxy.service session-migration.service
blueman-manager.service graphical-session.target org.gnome.SettingsDaemon.ScreensaverProxy.target session.slice
bluetooth.target gvfs-afc-volume-monitor.service org.gnome.SettingsDaemon.Sharing.service shutdown.target
colord-session.service gvfs-daemon.service org.gnome.SettingsDaemon.Sharing.target smartcard.target
dbus-org.bluez.obex.service gvfs-goa-volume-monitor.service org.gnome.SettingsDaemon.Smartcard.service sockets.target
dbus.service gvfs-gphoto2-volume-monitor.service org.gnome.SettingsDaemon.Smartcard.target sockets.target.wants
dbus.socket gvfs-metadata.service org.gnome.SettingsDaemon.Sound.service sound.target
dconf.service gvfs-mtp-volume-monitor.service org.gnome.SettingsDaemon.Sound.target speech-dispatcher.service
default.target gvfs-udisks2-volume-monitor.service org.gnome.SettingsDaemon.UsbProtection.service speech-dispatcher.socket
dirmngr.service obex.service org.gnome.SettingsDaemon.UsbProtection.target ssh-agent.service
dirmngr.socket org.gnome.Evince.service org.gnome.SettingsDaemon.Wacom.service systemd-exit.service
evolution-addressbook-factory.service org.gnome.SettingsDaemon.A11ySettings.service org.gnome.SettingsDaemon.Wacom.target systemd-tmpfiles-clean.service
evolution-calendar-factory.service org.gnome.SettingsDaemon.A11ySettings.target org.gnome.SettingsDaemon.Wwan.service systemd-tmpfiles-clean.timer
evolution-source-registry.service org.gnome.SettingsDaemon.Color.service org.gnome.SettingsDaemon.Wwan.target systemd-tmpfiles-setup.service
evolution-user-prompter.service org.gnome.SettingsDaemon.Color.target org.gnome.SettingsDaemon.XSettings.service timers.target
exit.target org.gnome.SettingsDaemon.Datetime.service org.gnome.SettingsDaemon.XSettings.target vte-spawn-.scope.d
gamemoded.service org.gnome.SettingsDaemon.Datetime.target paths.target xdg-desktop-autostart.target
glib-pacrunner.service org.gnome.SettingsDaemon.Housekeeping.service pipewire-media-session.service xdg-desktop-portal-gtk.service
gnome-keyring.service org.gnome.SettingsDaemon.Housekeeping.target pipewire.service xdg-desktop-portal-rewrite-launchers.service
gnome-keyring-ssh.service org.gnome.SettingsDaemon.Keyboard.service pipewire.socket xdg-desktop-portal.service
gnome-session-x11-services-ready.target.wants org.gnome.SettingsDaemon.Keyboard.target pk-debconf-helper.service xdg-desktop-portal-xapp.service
gnome-session-x11-services.target.wants org.gnome.SettingsDaemon.MediaKeys.service pk-debconf-helper.socket xdg-document-portal.service
gnome-terminal-server.service org.gnome.SettingsDaemon.MediaKeys.target plasma-kactivitymanagerd.service xdg-permission-store.service
gpg-agent-browser.socket org.gnome.SettingsDaemon.Power.service plasma-kded.service
gpg-agent-extra.socket org.gnome.SettingsDaemon.Power.target plasma-kglobalaccel.service
Код: Выделить всё
olej@R420:~$ ls -l /usr/lib/systemd/user/pulse*
-rw-r--r-- 1 root root 1121 фев 16 2023 /usr/lib/systemd/user/pulseaudio.service
-rw-r--r-- 1 root root 147 фев 21 2022 /usr/lib/systemd/user/pulseaudio.socket
-rw-r--r-- 1 root root 424 фев 16 2023 /usr/lib/systemd/user/pulseaudio-x11.service
Код: Выделить всё
olej@R420:~$ systemctl --user --no-pager --full status pulseaudio.service
● pulseaudio.service - Sound Service
Loaded: loaded (/usr/lib/systemd/user/pulseaudio.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2023-10-14 09:44:53 EEST; 14h ago
TriggeredBy: ● pulseaudio.socket
Main PID: 2897 (pulseaudio)
Tasks: 4 (limit: 115772)
Memory: 14.9M
CPU: 10min 50.996s
CGroup: /user.slice/user-1000.slice/user@1000.service/session.slice/pulseaudio.service
└─2897 /usr/bin/pulseaudio --daemonize=no --log-target=journal
окт 14 15:05:41 R420 pulseaudio[2897]: Скорее всего, это ошибка в драйвере ALSA «snd_usb_audio». Пожалуйста, сообщите об этой проблеме разработчикам ALSA.
окт 14 15:05:41 R420 pulseaudio[2897]: Процесс разбужен с установленным POLLOUT, однако последующий вызов snd_pcm_avail() вернул 0 или другое значение, меньшее чем min_avail.
окт 14 21:54:10 R420 pulseaudio[2897]: Got POLLNVAL from ALSA
окт 14 21:54:10 R420 pulseaudio[2897]: Error opening PCM device front:1: Нет такого файла или каталога
окт 14 21:55:37 R420 pulseaudio[2897]: Got POLLNVAL from ALSA
окт 14 21:55:37 R420 pulseaudio[2897]: Error opening PCM device front:1: Нет такого файла или каталога
окт 14 21:57:21 R420 pulseaudio[2897]: Got POLLNVAL from ALSA
окт 14 21:57:21 R420 pulseaudio[2897]: Got POLLNVAL from ALSA
окт 14 21:57:21 R420 pulseaudio[2897]: Error opening PCM device front:1: Нет такого файла или каталога
окт 14 21:57:21 R420 pulseaudio[2897]: Error opening PCM device hw:1: Нет такого файла или каталога
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
systemd (продолжение)
Это существенно важно
Как это работает
systemd позволяет пользователю управлять службами в личном, отдельном экземпляре systemd. Благодаря этому пользователь может запускать, останавливать, включать и отключать свои собственные юниты. Это очень удобно в случае демонов и служб, которые обычно запускаются для отдельного пользователя...
Имейте в виду, что systemd --user представляет собой процесс для каждого пользователя, а не для сессии. Смысл заключается в том, что большая часть ресурсов, обрабатываемых пользовательскими службами, такие как сокеты или файлы состояния будут создаваться отдельно для каждого пользователя (в его домашнем каталоге), и не за один сеанс. Это означает, что все пользовательские службы работают вне сеанса. Как следствие, программы, которые должны быть запущены внутри сессии, вероятно, прервут выполнение пользовательских служб. С помощью systemd в пользовательском сеансе обрабатывается довольно много данных.
Совет: Если вы хотите включить службу для всех пользователей, а не для пользователя, выполняющего команду systemctl , запустите systemctl --user --global enable service от имени суперпользователя.
Пользовательский процесс systemd запускается сразу после первого входа пользователя в систему, и будет убит после завершения последнего сеанса пользователя. Иногда может быть полезно запустить службу сразу после загрузки, и поддерживать процесс systemd запущенным даже после завершения последнего сеанса пользователя, например, чтобы некоторый пользовательский процесс работал без какой-либо открытой сессии. Для этой цели используются долговременные службы. Используйте следующую команду, чтобы включить долговременную службу для конкретного пользователя:Код: Выделить всё
# loginctl enable-linger username
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
systemd (продолжение)
Как запустить сервисы Systemd без пользователя root / sudo
Используемая опция:Systemd – это современный инит и замена rc в стиле SysV для систем Linux, которая использует многие современные функции ядра Linux.
...
Стандартные файлы модулей Systemd , которые поставляются с системой Linux или устанавливаются сторонними приложениями, обычно запускаются от имени пользователя root или системного пользователя.
–-user
Это тот же процесс, который вы можете использовать для создания любой другой службы Systemd, которой хотите управлять без повышения привилегий или создания другого системного пользователя для запуска службы.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
systemd (продолжение)
Наиболее полное руководство, естественно:
Код: Выделить всё
[olej@xenix ~]$ man systemd.service
...
Table 1. Special executable prefixes
┌──┬───────────────────────────────────────────────────────────┐
│ Prefix │ Effect │
├──┼───────────────────────────────────────────────────────────┤
│"@" │ If the executable path is prefixed with "@", the second specified │
│ │ token will be passed as "argv[0]" to the executed process (instead │
│ │ of the actual filename), followed by the further arguments │
│ │ specified. │
├──┼───────────────────────────────────────────────────────────┤
│"-" │ If the executable path is prefixed with "-", an exit code of the │
│ │ command normally considered a failure (i.e. non-zero exit status or │
│ │ abnormal exit due to signal) is recorded, but has no further effect │
│ │ and is considered equivalent to success. │
├──┼───────────────────────────────────────────────────────────┤
│":" │ If the executable path is prefixed with ":", environment variable │
│ │ substitution (as described by the "Command Lines" section below) is │
│ │ not applied. │
├──┼───────────────────────────────────────────────────────────┤
│"+" │ If the executable path is prefixed with "+" then the process is │
│ │ executed with full privileges. In this mode privilege restrictions │
│ │ configured with User=, Group=, CapabilityBoundingSet= or the │
│ │ various file system namespacing options (such as PrivateDevices=, │
│ │ PrivateTmp=) are not applied to the invoked command line (but still │
│ │ affect any other ExecStart=, ExecStop=, ... lines). However, note │
│ │ that this will not bypass options that apply to the whole control │
│ │ group, such as DevicePolicy=, see systemd.resource-control(5) for │
│ │ the full list. │
├──┼───────────────────────────────────────────────────────────┤
│"!" │ Similar to the "+" character discussed above this permits invoking │
│ │ command lines with elevated privileges. However, unlike "+" the "!" │
│ │ character exclusively alters the effect of User=, Group= and │
│ │ SupplementaryGroups=, i.e. only the stanzas that affect user and │
│ │ group credentials. Note that this setting may be combined with │
│ │ DynamicUser=, in which case a dynamic user/group pair is allocated │
│ │ before the command is invoked, but credential changing is left to │
│ │ the executed process itself. │
├──┼───────────────────────────────────────────────────────────┤
│"!!" │ This prefix is very similar to "!", however it only has an effect │
│ │ on systems lacking support for ambient process capabilities, i.e. │
│ │ without support for AmbientCapabilities=. It's intended to be used │
│ │ for unit files that take benefit of ambient capabilities to run │
│ │ processes with minimal privileges wherever possible while remaining │
│ │ compatible with systems that lack ambient capabilities support. │
│ │ Note that when "!!" is used, and a system lacking ambient │
│ │ capability support is detected any configured SystemCallFilter= and │
│ │ CapabilityBoundingSet= stanzas are implicitly modified, in order to │
│ │ permit spawned processes to drop credentials and capabilities │
│ │ themselves, even if this is configured to not be allowed. Moreover, │
│ │ if this prefix is used and a system lacking ambient capability │
│ │ support is detected AmbientCapabilities= will be skipped and not be │
│ │ applied. On systems supporting ambient capabilities, "!!" has no │
│ │ effect and is redundant. │
└──┴───────────────────────────────────────────────────────────┘
Причём эта дрянь меняется от версии к версии systemd - ещё вчера его не было, а сегодня появилось..."@", "-", ":", and one of "+"/"!"/"!!" may be used together and they can appear in any order. However, only one of "+", "!", "!!" may be used at a time. Note that these prefixes are also supported for the other command line settings, i.e. ExecStartPre=, ExecStartPost=, ExecReload=, ExecStop= and ExecStopPost=.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
systemd (продолжение)
Хорошая статья, подводящая итоги эксплуатации systemd - systemd десять лет спустя. Историческая и техническая ретроспектива
Читайте Очень познавательно30 мая 2020 в 19:00
Но для меня лично systemd это даже больше, чем middleware: это новая эпоха в истории экосистемы Linux, в одном ряду с KVM, Wine, Kubernetes и другими технологиями.
Кто сейчас на конференции
Сейчас этот форум просматривают: Google [Bot] и 4 гостя