Systemd — система инициализации.

Установка, настройка, эксплуатация.

Модератор: ROOT

Systemd — система инициализации.

Сообщение ROOT » 16 июн 2017, 01:20

Оглавление


Темы
 Система инициализации 
 Перезапуск сервисов 
 Таймеры systemd 
 Диагностика запуска модулей ядра 
 Диагностика запуска сервисов 
 Редактирование и переопределение стандартных юнитов и таймеров 
 Управление порядком запуска служб 


материал взят из статьи Шпаргалка по управлению сервисами systemd и дополнен
 Система инициализации 
Systemd приносит концепцию юнитов systemd. Юниты представлены конфигурационными файлами, размещенными
в одной из директорий:
/usr/lib/systemd/system/ – юниты из установленных пакетов RPM.
/run/systemd/system/ — юниты, созданные в рантайме. Этот каталог приоритетнее каталога с установленными
юнитами из пакетов.
/etc/systemd/system/ — юниты, созданные и управляемые системным администратором. Этот каталог приоритетнее
каталога юнитов, созданных в рантайме.

Типы юнитов systemd:
Код: выделить все
.service – системный сервис
.target — группа юнитов systemd
.automount – точка автомонтирования файловой системы
.device – файл устройства, распознанного ядром
.mount – точка монтирования файловой системы
.path – файл или директория в файловой системе
.scope – процесс, созданный извне
.slice – группа иерархически организованных юнитов, управляющая системными процессами
.snapshot – сохраненное состояние менеджера systemd
.socket – сокет межпроцессорного взаимодействия
.swap – Swop-устройство или swop-файл (файл подкачки)
.timer – таймер systemd


Runlevel 3 это сейчас multi-user.target и runlevel 5 сейчас graphical.target.

Ниже представлены основные команды systemctl:
Код: выделить все
systemctl start name.service – запуск сервиса.
systemctl stop name.service — остановка сервиса
systemctl restart name.service — перезапуск сервиса
systemctl try-restart name.service — перезапуск сервиса только, если он запущен
systemctl reload name.service — перезагрузка конфигурации сервиса
systemctl status name.service — проверка, запущен ли сервис с детальным выводом состояния сервиса
systemctl is-active name.service — проверка, запущен ли сервис с простым ответом: active или inactive
systemctl list-units --type service --all – отображение статуса всех сервисов
systemctl enable name.service – активирует сервис (позволяет стартовать во время запуска системы)
systemctl disable name.service – деактивирует сервис
systemctl reenable name.service – деактивирует сервис и сразу активирует его
systemctl is–enabled name.service – проверяет, активирован ли сервис
systemctl list-unit-files --type service – отображает все сервисы и проверяет, какие из них активированы
systemctl mask name.service – заменяет файл сервиса символической ссылкой на /dev/null, делая юнит недоступным для systemd
systemctl unmask name.service – возвращает файл сервиса, делая юнит доступным для systemd
systemctl daemon-reload - Перечитать конфигурацию systemd (после внесения правок в файлы сервисов)
systemctl list-timers --all - Вывести все запланированные задания
systemctl set-default multi-user.target - Установить целевой юнит multi-user
systemctl set-default graphical.target - Установить целевой юнит graphical.target
systemctl isolate multi-user.target - Переключиться с graphical (runlevel5.target) на multi-user (runlevel2-4.target)
systemctl isolate graphical.target - Переключиться с  multi-user (runlevel2-4.target) на graphical (runlevel5.target)
systemctl get-default - Узнать какой текущий режим в системе используется  (graphical.target или multi-user.target)
systemctl daemon-reexec - Перезапустить systemd и заставит его переварить свою новую конфигурацию в процессе.
systemctl --failed - Вывести всё сервисы которые не запустились


Код: выделить все
poweroff.target (runlevel0.target) – завершение работы и отключение системы
rescue.target (runlevel1.target) – настройка оболочки восстановления
reboot.target (runlevel6.target) – выключение и перезагрузка системы

Выключение и перезагрузка системы
В systemctl заменяет значительное количество команд управления питанием. Прежние
команды сохранены для совместимости, но рекомендуется использовать systemctl:
Код: выделить все
systemctl halt – останавливает систему
systemctl poweroff – выключает систему
systemctl reboot – перезагружает систему
Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 417
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 09 апр 2022, 20:17



 Перезапуск сервисов 

  • после вывода компьютера из сна здесь.
  • Для автоматизации процесса перезапуска служб после обновления можно воспользоваться однострочным скриптом
    Код: выделить все
    for s in $(sudo needs-restarting -s); do sudo systemctl restart $s; done
Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 417
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 09 апр 2022, 20:18

Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 417
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 09 апр 2022, 20:19



 Диагностика запуска модулей ядра 
Код: выделить все
systemctl -l status systemd-modules-load.service
Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 417
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 09 апр 2022, 20:20



 Диагностика запуска сервисов 
Вывести список сервисов не загрузившихся при старте системы можно так:
Код: выделить все
systemctl --state=failed
или
systemctl --failed

Для диагностики правильности указания зависимостей в директивах After и Before можно использовать штатную команду поиска конфликтов systemd-analyze
Код: выделить все
systemd-analyze verify default.target
Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 417
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 09 апр 2022, 20:20



 Редактирование и переопределение стандартных юнитов и таймеров 
Когда нужно поправить какой-нибудь из уже установленных в системе юнитов или таймеров, не следует делать это непосредственно в каталоге /usr/lib/systemd/. Это может привести к тому, что при следующем обновлении системы все изменения будут заново записаны.
Необходимо использовать в данном случае штатную возможность systemd для редактирования юнитов:
Код: выделить все
systemctl edit --full foobar.service

Здесь foobar.service — имя нужного нам юнита/таймера, который мы будем редактировать. Systemd автоматически сделает копию файла в пользовательский каталог настроек /etc/systemd/system/, загрузит его в системном редакторе по умолчанию, а по окончании внесения изменений заставит systemd применить их.
Чтобы изменить редактор по умолчанию, можно воспользоваться системой изменения альтернатив:
Код: выделить все
update-alternatives --config editor

Для отката любых внесённых изменений следует использовать:
Код: выделить все
systemctl revert foobar.service

Для предотвращения очистки консоли после загрузки создайте каталог с именем /etc/systemd/system/getty@.service.d и разместите в нём файл nodisallocate.conf, чтобы переопределить параметр TTYVTDisallocate на no.
$EDITOR /etc/systemd/system/getty@.service.d/nodisallocate.conf
Код: выделить все
[Service]
TTYVTDisallocate=no
Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 417
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 26 дек 2023, 17:44

 Управление порядком запуска служб 
Для того чтобы ваш сервис в systemd гарантированно запускался после активации сетевого интерфейса, управляемого NetworkManager, необходимо подключить его к network-online.target. Важно убедиться, что NetworkManager на самом деле сигнализирует о network-online.target.
Сначала, вам нужно удостовериться, что NetworkManager-wait-online.service включен и активен. Этот сервис обязан запускаться до network-online.target и ожидать, пока NetworkManager установит соединение.
Вы можете включить это с помощью systemd:
Код: выделить все
systemctl enable NetworkManager-wait-online.service

Также, чтобы обеспечить зависимость вашего сервиса от сети, вы должны указать:
Код: выделить все
[Unit]
...
Requires=network-online.target
After=network-online.target ...
...

[Service]
# Здесь определите свои опции конкретного сервиса

[Install]
WantedBy=multi-user.target

Requires: Если используется, тогда ваш сервис не будет запущен, если network-online.target не активен.
After: Гарантирует, что ваш сервис будет запущен после активации целевых unit'ов, объявленных в этой директиве.
Wants: Слабее, чем Requires. Если целевой unit не будет запущен, systemd всё равно попытается запустить ваш сервис.
После внесения этих изменений, необходимо перезагрузить systemd чтобы он знал о вашем новом или измененном unit-файле:
Код: выделить все
systemctl daemon-reload

Наконец, включите ваш сервис, чтобы он автоматически запускался при загрузке:
Код: выделить все
systemctl enable ваш_сервис.service

Также убедитесь, что ваши network интерфейсы правильно настроены в NetworkManager, чтобы network-online.target активировался после установления сетевого соединения.
Если у вас возникают проблемы с этим процессом, полезно проверить логи systemd и NetworkManager для диагностики проблем:
Код: выделить все
journalctl -u NetworkManager
journalctl -u ваш_сервис.service

Это базовые шаги для обеспечения запуска сервиса после установления сетевого соединения. Частные случаи могут требовать дополнительной настройки в зависимости от конкретных потребностей настраиваемого сервиса.
Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 417
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный


Вернуться в Fedora

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron