| Оглавление | ||
|---|---|---|
|
Введение
systemd – системный менеджер, управляющий операционной системой и службами. При загрузке операционной системы первым запускается менеджер systemd, который запускает остальную часть операционной системы (далее ОС).
Менеджер systemd:
- запускает и останавливает операционную систему;
- управляет запуском и остановкой служб;
- монтирует файловые системы;
- с помощью службы
journaldведёт журнал работы операционной системы и служб.
Менеджер systemd оперирует так называемыми юнитами (unit). Юниты отражают различные сущности операционной системы: службы, устройства, точки монтирования и др. Для каждой сущности используется свой тип юнита.
Информация о юнитах хранится в юнит-файлах, в которых описано: какую запускать программу при запуске юнита, при каких условиях запускать и останавливать программу, зависимости от других юнитов и т. д.
Название юнит-файла состоит из названия юнита и расширения. Расширение совпадает с типом юнита. Например, юнит-файл для запуска SSH-службы называется "ssh.service". В командах управления юнитами можно указывать как название юнита, так и название юнит-файла.
Юниты делятся на системные и пользовательские. Системные юниты используются для запуска системных программ и запускаются от имени привилегированного пользователя. Пользовательские – для запуска пользовательских программ от имени обычного пользователя.
Как правило, пользовательские юниты работают, пока пользователь зарегистрирован в системе. Если пользователю требуется запускать юниты на длительное время, то для пользователя можно включить lingering-режим, при котором пользовательские юниты будут запускаться при старте ОС и далее работать независимо от того, зарегистрирован пользователь в системе или нет. Подробнее см. в справке "man loginctl" команду "sudo loginctl enable-linger <имя_пользователя>".
Типы юнитов
Существует одиннадцать типов юнитов:
...
Объединяет набор юнитов для достижения какого-либо целевого состояния операционной системы.
Например, юнит для остановки ОС, юнит для перевода ОС в режим восстановления
...
Отражает какое-либо устройство компьютера.
Например, юнит для жёсткого диска, юнит для сетевой карты
...
Управляет службой, запущенной НЕ менеджером systemd.
Scope-юнит создаётся программно через API-интерфейс менеджера systemd. Этим он отличается от service-юнита, который описывается с помощью юнит-файла
| Информация | ||
|---|---|---|
| ||
|
Введение
systemd – системный менеджер, управляющий операционной системой и службами. При загрузке операционной системы первым запускается менеджер systemd, который запускает остальную часть операционной системы (далее ОС).
Менеджер systemd:
- запускает и останавливает операционную систему;
- управляет запуском и остановкой служб;
- монтирует файловые системы;
- с помощью службы
journaldведёт журнал работы операционной системы и служб.
Менеджер systemd оперирует так называемыми юнитами (unit). Юниты отражают различные сущности операционной системы: службы, устройства, точки монтирования и др. Для каждой сущности используется свой тип юнита.
Информация о юнитах хранится в юнит-файлах, в которых описано: какую запускать программу при запуске юнита, при каких условиях запускать и останавливать программу, зависимости от других юнитов и т. д.
Название юнит-файла состоит из названия юнита и суффикса. Суффикс совпадает с типом юнита. Например, юнит-файл для запуска SSH-службы называется "ssh.service". В командах управления юнитами можно указывать как название юнита, так и название юнит-файла.
Юниты делятся на системные и пользовательские. Системные юниты используются для запуска системных программ и запускаются от имени привилегированного пользователя. Пользовательские – для запуска пользовательских программ от имени обычного пользователя.
Как правило, пользовательские юниты работают, пока пользователь зарегистрирован в системе. Чтобы юниты пользователя запускались при старте ОС и далее работали независимо от того, зарегистрирован пользователь в системе или нет, необходимо использовать команду:
| Command |
|---|
|
Подробнее см. справку "man loginctl" .
Типы юнитов
Существует одиннадцать типов юнитов:
| Тип юнита | Назначение юнита |
|---|---|
| service | Управляет службой, программой |
| socket | Управляет локальным IPC или сетевым сокетом |
| target | Объединяет набор юнитов для достижения какого-либо целевого состояния операционной системы. Например, юнит для остановки ОС, юнит для перевода ОС в режим восстановления |
| device | Отражает какое-либо устройство компьютера. Например, юнит для жёсткого диска, юнит для сетевой карты |
| mount | Управляет точкой монтирования в файловой системе |
| automount | Управляет автомонтированием накопительных устройств |
| timer | Активирует другие юниты по таймеру |
| swap | Управляет разделом или файлом подкачки |
| path | Активирует какую-либо службу при изменении объекта файловой системы, находящегося по заданному пути |
| slice | Объединяет набор юнитов для управления ресурсами, потребляемыми этими юнитами |
| scope | Управляет службой, запущенной НЕ менеджером Scope-юнит создаётся программно через API-интерфейс менеджера |
Управление операционной системой
Состояния операционной системы
Операционная система находится в одном из состояний: выключена, многопользовательский графический режим, однопользовательский текстовой режим, и т. п. Для перевода ОС в то или иное целевое состояние используются target-юниты. Целевые состояния системы являются более гибким аналогом уровней выполнения (runlevel) традиционной программы запуска операционной системы init.
Также есть специальные target-юниты, которые запускаются при определённом событии и не влияют на целевое состояние ОС. Например, при подключении к компьютеру принтера автоматически активируется юнит printer.target (см. справку "man systemd.special").
Для отображения текущего целевого состояния ОС (запущенного target-юнита) используется команда:
| Command |
|---|
systemctl get-default |
Для перевода ОС в целевое состояние используется команда:
| Command |
|---|
sudo systemctl isolate <название_target_юнита> |
При запуске команды:
- запускаются все юниты (если они ещё не запущены), которые соответствуют целевому состоянию операционной системы;
- останавливаются все остальные юниты. За исключением тех, которые имеют соответствующую настройку.
Для части юнитов есть укороченные команды без использования команды "isolate". Некоторые из них приведены в следующих подразделах текущего раздела.
Примеры target-юнитов:
| Юнит | Целевое состояние ОС |
|---|---|
| default.target | Юнит, который используется для запуска ОС. Обычно, это ссылка на |
| graphical.target | Многопользовательский графический режим ОС |
| multi-user.target | Многопользовательский текстовой режим ОС |
| rescue.target | Режим восстановления операционной системы |
| reboot.target | Перезагрузка ОС |
| poweroff.target | Выключение ОС с выключением питания компьютера |
Остановка и перезагрузка операционной системы
Для остановки ОС (перевода в целевое состояние poweroff.target) используется команда:
| Command |
|---|
sudo systemctl poweroff |
Для перезагрузки ОС (перевода в целевое состояние reboot.target) используется команда:
| Command |
|---|
sudo systemctl reboot |
Режим восстановления операционной системы
В каких-то случаях может потребоваться режим восстановления ОС, при котором запущено минимальное количество процессов.
Для перехода в режим восстановления ОС используется команда:
| Command |
|---|
sudo systemctl rescue |
После восстановления необходимо перевести ОС в нормальный режим работы. Для этого используется команда:
| Command |
|---|
sudo systemctl default |
Для просмотра текущего режима работы ОС используется команда:
| Command |
|---|
sudo systemctl is-system-running |
Возможные режимы работы ОС:
| Режим ОС | Описание |
|---|---|
initializing | Ранний этап загрузки ОС |
| starting | Поздний этап загрузки ОС |
| running | Нормальный режим работы ОС |
| degraded | ОС работает в нормальном режиме, но у каких-то юнитов есть ошибки |
| maintenance | ОС работает в режиме восстановления |
| stopping | Идёт процесс остановки работы менеджера systemd |
| offline | Менеджер systemd не запущен |
| unknown | Режим работы ОС не определён из-за нехватки ресурсов или по иной причине |
Управление юнитами
Запуск и остановка юнита
Для запуска (активирования) юнита используется команда:
| Command |
|---|
sudo systemctl start <название_юнита> |
Для остановки (деактивирования) юнита используется команда:
| Command |
|---|
sudo systemctl stop <название_юнита> |
Для перезапуска юнита, т.е для остановки (если юнит был запущен) и последующего запуска юнита, используется команда:
| Command |
|---|
sudo systemctl restart <название_юнита> |
Автозапуск юнита
Когда активируется target-юнит, менеджер systemd автоматически запускает другие юниты, которые связаны с активированным target-юнитом.
Так, при запуске ОС активируется юнит default.target, который переводит ОС в целевое состояние по умолчанию. При этом автоматически будут запущены все юниты, которые связаны с юнитом default.target.
Другой пример – при подключении принтера к компьютеру автоматически активируется специальный юнит printer.target. При этом автоматически будет запущен юнит cups.service, связанный с юнитом printer.target.
Чтобы связать юнит с target-юнитом, необходимо:
- в юнит-файле в опции "
WantedBy=" указать название target-юнита; - включить автозапуск юнита (если он не включен) с помощью команды "
systemctl enable <название_юнита>".
Для включения автозапуска юнита используется команда:
| Command |
|---|
sudo systemctl enable <название_юнита> |
Для отключения автозапуска юнита используется команда:
| Command |
|---|
sudo systemctl disable <название_юнита> |
Запуск (активирование) юнита по таймеру
С помощью timer-юнита можно активировать (запускать) другой юнит по таймеру: в заданное календарное время, с заданной периодичностью, через какое-то время после запуска ОС или регистрации пользователя в системе и т. д. Одновременно могут быть заданы разные таймеры.
Если в момент активации по таймеру юнит уже активен (запущен), то юнит не перезапускается, а остаётся в активном состоянии.
Название активируемого юнит-файла должно иметь суффикс отличный от .timer. Рекомендуется, чтобы названия файлов: активируемого юнита и timer-юнита – совпадали, за исключением суффикса. Например, logrotate.service и logrotate.timer.
Подробнее про timer-юнит см. статью "Использование таймеров systemd вместо заданий cron"
Управление операционной системой
Состояния операционной системы
Операционная система находится в одном из состояний: выключена, многопользовательский графический режим, однопользовательский текстовой режим, и т. п.
Для перевода ОС в то или иное состояние используются target-юниты.
При запуске target-юнита:
- запускаются все юниты (если они ещё не запущены), которые соответствуют целевому состоянию операционной системы;
- останавливаются все остальные юниты. За исключением тех, которые имеют соответствующую настройку.
Целевые состояния системы являются более гибким аналогом уровней выполнения (runlevel) традиционной программы запуска операционной системы init.
Для отображения текущего целевого состояния ОС (запущенного target-юнита) используется команда:
| Command |
|---|
systemctl get-default |
Для перевода ОС в целевое состояние используется команда:
| Command |
|---|
sudo systemctl isolate <название_target_юнита> |
Для некоторых юнитов есть укороченные команды без использования слова "isolate". Ряд этих команд приведён в нижеследующих подразделах.
Назначение некоторых target-юнитов:
...
Юнит, который используется для запуска ОС.
Обычно, это ссылка на graphical.target или multi-user.target
...
Остановка и перезагрузка операционной системы
Для остановки ОС используется команда:
| Command |
|---|
sudo systemctl poweroff |
Для перезагрузки ОС используется команда:
| Command |
|---|
sudo systemctl reboot |
Режим восстановления операционной системы
В каких-то случаях может потребоваться режим восстановления ОС, при котором запущено минимальное количество процессов.
Для перехода в режим восстановления ОС используется команда:
| Command |
|---|
sudo systemctl rescue |
После восстановления необходимо перевести ОС в нормальный режим работы. Для этого используется команда:
| Command |
|---|
sudo systemctl default |
Для просмотра текущего режима работы ОС используется команда:
| Command |
|---|
sudo systemctl is-system-running |
Возможные режимы работы ОС:
...
initializing
...
Управление юнитами
Запуск и остановка юнита
Для запуска (активации) юнита используется команда:
| Command |
|---|
sudo systemctl start <unit_name> |
где <unit_name> – название юнита.
Для остановки (деактивации) юнита используется команда:
| Command |
|---|
sudo systemctl stop <unit_name> |
где <unit_name> – название юнита.
Для перезапуска юнита, т.е для остановки (если юнит был запущен) и последующего запуска юнита, используется команда:
| Command |
|---|
sudo systemctl restart <unit_name> |
где <unit_name> – название юнита.
Автозапуск юнита
Менеджер systemd может автоматически запускать юниты, например, при загрузке ОС или при подключении к компьютеру определённого оборудования.
Для включения автозапуска юнита используется команда:
| Command |
|---|
sudo systemctl enable <unit_name> |
где <unit_name> – название юнита.
Для отключения автозапуска юнита используется команда:
| Command |
|---|
sudo systemctl disable <unit_name> |
...
.
Отображение информации о юнитах
Для отображения состояния юнита, а также последней информации из журнала работы юнита, используется команда:
| Command |
|---|
sudo systemctl status |
...
где <unit_name> – название юнита.
<название_ |
...
юнита> |
| Раскрыть | ||
|---|---|---|
| ||
где
|
Для отображения иерархического дерева запущенных юнитов используется команда:
| Command |
|---|
sudo systemctl status |
| Раскрыть | ||
|---|---|---|
| ||
|
Журнал работы операционной системы и служб
Служба journald собирает и хранит журнал работы операционной системы и служб (юнитов)
...
.
Журнал хранятся в двоичном виде.
Параллельно с journald может работать другая служба журналирования, например, syslog-ng, чтобы вести набор классических текстовых журналов в каталоге /var/log/.
Подробнее о команде просмотра журнала см. справку "man journalctl" и статью "Анализ журналов системных служб Astra Linux".
Для отображения всех записей журнала, начиная с самой старой, используется команда:
| Command |
|---|
sudo journalctl |
Для отображения записей журнала, относящихся к юниту, используется команда:
| Command |
|---|
sudo journalctl -u |
...
<название_юнита> |
С помощью опций, добавляемых к команде 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> – уникальный идентификатор локального компьютера. Идентификатор хранится в файле |