| Оглавление | ||
|---|---|---|
|
| Информация | ||
|---|---|---|
| ||
|
Введение
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 |
...
<название_ |
...
где <unit_name> – название юнита.
Автозапуск юнитов
Менеджер systemd может автоматически запускать юниты, например, при загрузке ОС или при подключении к компьютеру определённого оборудования.
...
юнита> |
Автозапуск юнита
Когда активируется 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"
...
.
Отображение информации о юнитах
Для отображения состояния юнита, а также последней информации из журнала работы юнита, используется команда:
| Command |
|---|
sudo systemctl status |
...
<название_юнита> |
| Раскрыть | ||
|---|---|---|
| ||
где
|
Для отображения иерархического дерева запущенных юнитов используется команда:
| Command |
|---|
sudo systemctl status |
| Раскрыть | ||
|---|---|---|
| ||
|
...
Журнал работы операционной системы и служб
Служба journald собирает и хранит
...
журнал работы операционной системы и служб (юнитов).
...
Журнал хранятся в двоичном виде.
Параллельно с journald может работать другая служба журналирования, например, syslog-ng, чтобы вести набор классических текстовых журналов в каталоге /var/log/.
Подробнее о команде просмотра журнала см. справку "man journalctl" и статью "Анализ журналов системных служб Astra Linux".
Для отображения всех записей журнала, начиная с самой старой, используется команда:
| Command |
|---|
sudo journalctl |
Для отображения записей журнала, относящихся к юниту, используется команда:
| Command |
|---|
sudo journalctl -u |
...
где <unit_name> – название юнита.
<название_ |
...
юнита> |
С помощью опций, добавляемых к команде journalctl, можно
...
настроить отображение журнала:
| Опция | Описание |
|---|---|
| -n [количество_записей] | Вывести самые последние записи журнала. |
...
Где [количество_записей] – число, отражающее количество выводимых записей. Чтобы прервать выполнение команды, необходимо нажать клавишу <Q> | |
| -f | Вывести самые последние записи журнала, затем выводить записи по мере их поступления в журнал. По умолчанию выводится 10 записей. Чтобы прервать выполнение команды, необходимо нажать сочетание клавиш <CTRL+C> |
| -r | Изменить порядок вывода записей на обратный, чтобы самые |
...
новые записи выводились самыми первыми |
Подробнее о команде просмотра журнала см. справку "man journalctl".
Расположение файлов и каталогов менеджера 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> – уникальный идентификатор локального компьютера. Идентификатор хранится в файле |