Введение
systemd – системный менеджер, управляющий операционной системой и службами. При загрузке операционной системы первым запускается менеджер systemd, который запускает остальную часть операционной системы (далее ОС).
Менеджер systemd:
- запускает и останавливает операционную систему;
- управляет запуском и остановкой служб;
- монтирует файловые системы;
- ведёт журналы работы операционной системы и служб.
Менеджер systemd оперирует так называемыми юнитами (unit). Юниты отражают различные сущности операционной системы: службы, устройства, точки монтирования и др. Для каждой сущности используется свой тип юнита.
Информация о юнитах хранится в юнит-файлах, в которых описано: какую запускать программу при запуске юнита, при каких условиях запускать и останавливать программу, зависимости от других юнитов и т. д.
Название юнит-файла состоит из названия юнита и расширения. Расширение совпадает с типом юнита. Например, юнит-файл для запуска SSH-службы называется "ssh.service". В командах управления юнитами можно указывать как название юнита, так и название юнит-файла.
Юниты делятся на системные и пользовательские. Системные юниты используются для запуска системных программ и запускаются от имени привилегированного пользователя. Пользовательские – для запуска пользовательских программ от имени обычного пользователя.
Типы юнитов
Существует одиннадцать типов юнитов:
| Тип юнита | Назначение юнита |
|---|---|
| service | Управляет службой, программой |
| socket | Управляет локальным IPC или сетевым сокетом |
| target | Объединяет набор юнитов для достижения какого-либо целевого состояния операционной системы. Например, юнит для остановки ОС, юнит для перевода ОС в режим восстановления |
| device | Отражает какое-либо устройство компьютера. Например, юнит для жёсткого диска, юнит для сетевой карты |
| mount | Управляет точкой монтирования в файловой системе |
| automount | Управляет автомонтированием накопительных устройств |
| timer | Активирует другие юниты по таймеру |
| swap | Управляет разделом или файлом подкачки |
| path | Активирует какую-либо службу при изменении объекта файловой системы, находящегося по заданному пути |
| slice | Объединяет набор юнитов для управления ресурсами, потребляемыми этими юнитами |
| scope | Управляет службой, запущенной НЕ менеджером Scope-юнит создаётся программно через API-интерфейс менеджера |
Управление операционной системой
Остановка и перезагрузка операционной системы
Для остановки ОС используется команда:
Для перезагрузки ОС используется команда:
Режим восстановления операционной системы
В каких-то случаях может потребоваться режим восстановления ОС, при котором запущено минимальное количество процессов.
Для перехода в режим восстановления ОС используется команда:
После восстановления необходимо перевести ОС в нормальный режим работы. Для этого используется команда:
Для просмотра текущего режима работы ОС используется команда:
Возможные режимы работы ОС:
| Режим ОС | Описание |
|---|---|
initializing | Ранний этап загрузки ОС |
| starting | Поздний этап загрузки ОС |
| running | Нормальный режим работы ОС |
| degraded | ОС работает в нормальном режиме, но у каких-то юнитов есть ошибки |
| maintenance | ОС работает в режиме восстановления |
| stopping | Идёт процесс остановки работы менеджера systemd |
| offline | Менеджер systemd не запущен |
| unknown | Режим работы ОС не определён из-за нехватки ресурсов или по иной причине |
Управление юнитами
Запуск и остановка юнита
Для запуска (активации) юнита используется команда:
где <unit_name> – название юнита.
Для остановки (деактивации) юнита используется команда:
где <unit_name> – название юнита.
Для перезапуска юнита, т.е для остановки (если юнит был запущен) и последующего запуска юнита, используется команда:
где <unit_name> – название юнита.
Автозапуск юнита
Менеджер systemd может автоматически запускать юниты, например, при загрузке ОС или при подключении к компьютеру определённого оборудования.
Для включения автозапуска юнита используется команда:
где <unit_name> – название юнита.
Для отключения автозапуска юнита используется команда:
где <unit_name> – название юнита.
Отображение информации о юнитах
Для отображения состояния юнита, а также последней информации из журнала работы юнита, используется команда:
где <unit_name> – название юнита.
Для отображения иерархического дерева запущенных юнитов используется команда:
Журналы работы операционной системы и служб
Служба journald собирает и хранит журналы работы операционной системы и служб.
Журналы хранятся в двоичном виде.
Параллельно с journald может работать другая служба журналирования, например, syslog-ng.
Для отображения всех записей журнала, начиная с самой старой, используется команда:
Для отображения записей журнала, относящихся к юниту, используется команда:
где <unit_name> – название юнита.
С помощью опций, добавляемых к команде journalctl, можно изменить отображение журнала:
| Опция | Описание |
|---|---|
| -n | Вывести самые последние записи журнала. По умолчанию выводится 10 записей. Чтобы вывести иное количество записей, необходимо к опции добавить число выводимых записей, например "-n 20". Чтобы прервать выполнение команды, необходимо нажать клавишу <Q> |
| -f | Вывести самые последние записи журнала, затем выводить записи по мере их поступления в журнал. По умолчанию выводится 10 записей. Чтобы вывести иное количество записей, необходимо использовать опцию "-n". Чтобы прервать выполнение команды, необходимо нажать сочетание клавиш <CTRL+C> |
| -r | Изменить порядок вывода записей на обратный, чтобы самые последние записи выводились самыми первыми |
Подробнее о команде просмотра журнала см. справку "man journalctl".
Расположение файлов и каталогов менеджера systemd
| Файл или каталог | Описание |
|---|---|
| /etc/systemd/ | Каталог с файлами настроек *.conf менеджера systemd |
| /etc/systemd/system/ | Каталог с автозапускаемыми системными юнит-файлами. Как правило, в каталоге создаются ссылки на юнит-файлы в каталоге /lib/systemd/system/, а не создаются свои юнит-файлы |
| /etc/systemd/user/ | Каталог с автозапускаемыми пользовательскими юнит-файлами. Как правило, в каталоге создаются ссылки на юнит-файлы в каталоге /usr/lib/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/ | Каталог для временного хранения журналов работы ОС и служб. Каталог используется, если не доступен каталог /var/log/journal/ (например, во время старта ОС) |