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 --state=failed - Вывести всё сервисы которые не запустились
или
systemctl |grep failed


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

Выключение и перезагрузка системы
В systemctl заменяет значительное количество команд управления питанием. Прежние
команды сохранены для совместимости, но рекомендуется использовать systemctl:
Код: выделить все
systemctl halt – останавливает систему
systemctl poweroff – выключает систему
systemctl reboot – перезагружает систему



 Перезапуск сервисов после сна 
Создаём сам сервис, который запускается при выходе машины из сна. Данный сервис дёргает SH-скрипт из каталога /sbin
cat /usr/lib/systemd/system/after-suspend.service
Код: выделить все
[Unit]
Description=After suspend
After=suspend.target

[Service]
User=root
Type=oneshot
ExecStart=/sbin/after-suspend.sh
TimeoutSec=30
StandardOutput=syslog

[Install]
WantedBy=suspend.target

Скрипт перезапуска сервисов. В него можно при необходимости добавить сервисы, нуждающиеся в перезапуске. Информация о результате перезапуска заносится в лог-файл
cat /sbin/my-script/after-suspend.sh
Код: выделить все
#!/bin/bash
##############################################
# Перезапуск сервисов после сна
# Составлено: SSERGEY
# Дата: 04.04.2017 v1.0
#############################################
BASE_PATH="${0%/*}"
LOG="/var/log/after-suspend"
systemctl restart named > /dev/null 2>&1
if [ $? -eq 0 ]
then
        echo "$(date) Сервер DNS перезапущен" >> $LOG
else
        echo "$(date) Не удалось перезапустить Сервер DNS" >> $LOG
        exit 1
fi

Пример лог-файла
cat /var/log/after-suspend
Код: выделить все
Вт апр  4 22:03:13 MSK 2017 Сервер DNS перезапущен



 Таймеры systemd 
Скрипты планировщика заданий


 Диагностика запуска модулей ядра 
Код: выделить все
systemctl -l status systemd-modules-load.service



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

Для диагностики правильности указания зависимостей в директивах After и Before можно использовать штатную команду поиска конфликтов systemd-analyze
Код: выделить все
systemd-analyze verify default.target



 Редактирование и переопределение стандартных юнитов и таймеров 
В случае если нужно отредактировать какой-то из уже установленных в системе юнитов или таймеров, ни в коем случае не следует непосредственно править файл внутри каталога /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: 4274320029755744
QIWI: +79175241450
Аватар пользователя
ROOT
Администратор
 
Сообщений: 137
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Вернуться в Fedora

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

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