Введение
systemd – системный менеджер, управляющий операционной системой и службами. При загрузке операционной системы первым запускается менеджер systemd, который запускает остальную часть операционной системы (далее ОС).
Менеджер systemd:
- запускает и останавливает операционную систему;
- управляет запуском и остановкой служб;
- монтирует файловые системы;
- с помощью службы
journaldведёт журнал работы операционной системы и служб.
Менеджер systemd оперирует так называемыми юнитами (unit). Юниты отражают различные сущности операционной системы: службы, устройства, точки монтирования и др. Для каждой сущности используется свой тип юнита.
Информация о юнитах хранится в юнит-файлах, в которых описано: какую запускать программу при запуске юнита, при каких условиях запускать и останавливать программу, зависимости от других юнитов и т. д.
Название юнит-файла состоит из названия юнита и суффикса. Суффикс совпадает с типом юнита. Например, юнит-файл для запуска SSH-службы называется "ssh.service". В командах управления юнитами можно указывать как название юнита, так и название юнит-файла.
Юниты делятся на системные и пользовательские. Системные юниты используются для запуска системных программ и запускаются от имени привилегированного пользователя. Пользовательские – для запуска пользовательских программ от имени обычного пользователя.
Как правило, пользовательские юниты работают, пока пользователь зарегистрирован в системе. Если пользователю требуется запускать юниты на длительное время, то для пользователя можно включить lingering-режим, при котором пользовательские юниты будут запускаться при старте ОС и далее работать независимо от того, зарегистрирован пользователь в системе или нет. Подробнее см. в справке "man loginctl" команду "sudo loginctl enable-linger <имя_пользователя>".
Типы юнитов
Существует одиннадцать типов юнитов:
| Тип юнита | Назначение юнита |
|---|---|
| service | Управляет службой, программой |
| socket | Управляет локальным IPC или сетевым сокетом |
| target | Объединяет набор юнитов для достижения какого-либо целевого состояния операционной системы. Например, юнит для остановки ОС, юнит для перевода ОС в режим восстановления |
| device | Отражает какое-либо устройство компьютера. Например, юнит для жёсткого диска, юнит для сетевой карты |
| mount | Управляет точкой монтирования в файловой системе |
| automount | Управляет автомонтированием накопительных устройств |
| timer | Активирует другие юниты по таймеру |
| swap | Управляет разделом или файлом подкачки |
| path | Активирует какую-либо службу при изменении объекта файловой системы, находящегося по заданному пути |
| slice | Объединяет набор юнитов для управления ресурсами, потребляемыми этими юнитами |
| scope | Управляет службой, запущенной НЕ менеджером Scope-юнит создаётся программно через API-интерфейс менеджера |
Управление операционной системой
Состояния операционной системы
Операционная система находится в одном из состояний: выключена, многопользовательский графический режим, однопользовательский текстовой режим, и т. п.
Для перевода ОС в то или иное состояние используются target-юниты.
При запуске target-юнита:
- запускаются все юниты (если они ещё не запущены), которые соответствуют целевому состоянию операционной системы;
- останавливаются все остальные юниты. За исключением тех, которые имеют соответствующую настройку.
Целевые состояния системы являются более гибким аналогом уровней выполнения (runlevel) традиционной программы запуска операционной системы init.
Для отображения текущего целевого состояния ОС (запущенного target-юнита) используется команда:
Для перевода ОС в целевое состояние используется команда:
Для некоторых юнитов есть укороченные команды без использования слова "isolate". Ряд этих команд приведён в нижеследующих подразделах.
Назначение некоторых target-юнитов:
| Юнит | Целевое состояние ОС |
|---|---|
| default.target | Юнит, который используется для запуска ОС. Обычно, это ссылка на graphical.target или multi-user.target |
| graphical.target | Многопользовательский графический режим ОС |
| multi-user.target | Многопользовательский текстовой режим ОС |
| rescue.target | Режим восстановления операционной системы |
| reboot.target | Перезагрузка ОС |
| poweroff.target | Выключение ОС с выключением питания компьютера |
Остановка и перезагрузка операционной системы
Для остановки ОС используется команда:
Для перезагрузки ОС используется команда:
Режим восстановления операционной системы
В каких-то случаях может потребоваться режим восстановления ОС, при котором запущено минимальное количество процессов.
Для перехода в режим восстановления ОС используется команда:
После восстановления необходимо перевести ОС в нормальный режим работы. Для этого используется команда:
Для просмотра текущего режима работы ОС используется команда:
Возможные режимы работы ОС:
| Режим ОС | Описание |
|---|---|
initializing | Ранний этап загрузки ОС |
| starting | Поздний этап загрузки ОС |
| running | Нормальный режим работы ОС |
| degraded | ОС работает в нормальном режиме, но у каких-то юнитов есть ошибки |
| maintenance | ОС работает в режиме восстановления |
| stopping | Идёт процесс остановки работы менеджера systemd |
| offline | Менеджер systemd не запущен |
| unknown | Режим работы ОС не определён из-за нехватки ресурсов или по иной причине |
Управление юнитами
Запуск и остановка юнита
Для запуска (активирования) юнита используется команда:
Для остановки (деактивирования) юнита используется команда:
Для перезапуска юнита, т.е для остановки (если юнит был запущен) и последующего запуска юнита, используется команда:
Автозапуск юнита
Менеджер systemd может автоматически запускать юниты, например, при загрузке ОС или при подключении к компьютеру определённого оборудования.
Для включения автозапуска юнита используется команда:
Для отключения автозапуска юнита используется команда:
Активирование юнита по таймеру
С помощью timer-юнита можно активировать (запускать) другой юнит по таймеру: в заданное календарное время, с заданной периодичностью, через какое-то время после запуска ОС или регистрации пользователя в системе и т. д. Одновременно могут быть заданы разные таймеры.
Если в момент активации по таймеру юнит уже активен (запущен), то юнит не перезапускается, а остаётся в активном состоянии.
Название активируемого юнит-файла должно иметь суффикс отличный от .timer. Рекомендуется, чтобы названия файлов: активируемого юнита и timer-юнита – совпадали, за исключением суффикса. Например, logrotate.service и logrotate.timer.
Подробнее про timer-юнит см. статью "Использование таймеров systemd вместо заданий cron".
Отображение информации о юнитах
Для отображения состояния юнита, а также последней информации из журнала работы юнита, используется команда:
Для отображения иерархического дерева запущенных юнитов используется команда:
Журнал работы операционной системы и служб
Служба journald собирает и хранит журнал работы операционной системы и служб (юнитов). Дополнительно см. статью "Анализ журналов системных служб Astra Linux".
Журнал хранятся в двоичном виде.
Параллельно с journald может работать другая служба журналирования, например, syslog-ng, чтобы вести набор классических текстовых журналов в каталоге /var/log/.
Подробнее о команде просмотра журнала см. справку "man journalctl".
Для отображения всех записей журнала, начиная с самой старой, используется команда:
Для отображения записей журнала, относящихся к юниту, используется команда:
С помощью опций, добавляемых к команде journalctl, можно настроить отображение журнала:
| Опция | Описание |
|---|---|
| -n [количество_записей] | Вывести самые последние записи журнала. Где [количество_записей] – число, отражающее количество выводимых записей. Чтобы прервать выполнение команды, необходимо нажать клавишу <Q> |
| -f | Вывести самые последние записи журнала, затем выводить записи по мере их поступления в журнал. По умолчанию выводится 10 записей. Чтобы прервать выполнение команды, необходимо нажать сочетание клавиш <CTRL+C> |
| -r | Изменить порядок вывода записей на обратный, чтобы самые новые записи выводились самыми первыми |
Расположение файлов и каталогов менеджера systemd
| Файл или каталог | Описание |
|---|---|
| /etc/systemd/ | Каталог с файлами настроек *.conf менеджера systemd |
| /etc/systemd/system/ | Каталог с автозапускаемыми системными юнит-файлами. Как правило, в каталоге создаются ссылки на юнит-файлы из каталога |
| /etc/systemd/user/ | Каталог с автозапускаемыми пользовательскими юнит-файлами. Как правило, в каталоге создаются ссылки на юнит-файлы из каталога |
/lib/systemd/system/ (фактически это /usr/lib/systemd/system/) | Каталог доступных системных юнит-файлов. В каталог устанавливаются системные юнит-файлы во время установки программ |
| /usr/lib/systemd/user/ | Каталог доступных пользовательских юнит-файлов. В каталог устанавливаются пользовательские юнит-файлы во время установки программ |
| /etc/systemd/journald.conf | Файл с настройками службы журналирования |
| /var/log/journal/<machine-id>/ | Каталог для постоянного хранения журнала работы ОС и служб (юнитов). <machine-id> – уникальный идентификатор локального компьютера. Идентификатор хранится в файле |
| /run/log/journal/<machine-id>/ | Каталог для временного хранения журнала работы ОС и служб (юнитов). Каталог используется, если не доступен каталог <machine-id> – уникальный идентификатор локального компьютера. Идентификатор хранится в файле |