Данная статья применима к:
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8)
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7)
- Astra Linux Special Edition РУСБ.10015-17
- Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)
- Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
- Astra Linux Special Edition РУСБ.10153-02 (очередное обновление 3.8)
1. Введение
systemd – системный менеджер, управляющий операционной системой и службами. При загрузке операционной системы первым запускается менеджер systemd, который запускает остальную часть операционной системы (далее ОС).
Менеджер systemd:
- запускает и останавливает операционную систему;
- управляет запуском и остановкой служб;
- монтирует файловые системы;
- с помощью службы
journaldведёт журнал работы операционной системы и служб.
Менеджер systemd оперирует так называемыми юнитами (unit). Юниты отражают различные сущности операционной системы: службы, устройства, точки монтирования и др. Для каждой сущности используется свой тип юнита.
Информация о юнитах хранится в юнит-файлах, в которых описано: какую запускать программу при запуске юнита, при каких условиях запускать и останавливать программу, зависимости от других юнитов и т. д.
Название юнит-файла состоит из названия юнита и суффикса. Суффикс совпадает с типом юнита. Например, юнит-файл для запуска SSH-службы называется "ssh.service". В командах управления юнитами можно указывать как название юнита, так и название юнит-файла.
Юниты делятся на системные и пользовательские. Системные юниты используются для запуска системных программ и запускаются от имени привилегированного пользователя. Пользовательские – для запуска пользовательских программ от имени обычного пользователя.
Как правило, пользовательские юниты работают, пока пользователь зарегистрирован в системе. Чтобы юниты пользователя запускались при старте ОС и далее работали независимо от того, зарегистрирован пользователь в системе или нет, необходимо использовать команду:
sudo loginctl enable-linger <имя_пользователя> Подробнее см. справку "man loginctl" .
2. Типы юнитов
Существует одиннадцать типов юнитов:
| Тип юнита | Назначение юнита |
|---|---|
| service | Управляет службой, программой |
| socket | Управляет локальным IPC или сетевым сокетом |
| target | Объединяет набор юнитов для достижения какого-либо целевого состояния операционной системы. Например, юнит для остановки ОС, юнит для перевода ОС в режим восстановления |
| device | Отражает какое-либо устройство компьютера. Например, юнит для жёсткого диска, юнит для сетевой карты |
| mount | Управляет точкой монтирования в файловой системе |
| automount | Управляет автомонтированием накопительных устройств |
| timer | Активирует другие юниты по таймеру |
| swap | Управляет разделом или файлом подкачки |
| path | Активирует какую-либо службу при изменении объекта файловой системы, находящегося по заданному пути |
| slice | Объединяет набор юнитов для управления ресурсами, потребляемыми этими юнитами |
| scope | Управляет службой, запущенной НЕ менеджером Scope-юнит создаётся программно через API-интерфейс менеджера |
3. Управление операционной системой
3.1. Состояния операционной системы
Операционная система находится в одном из состояний: выключена, многопользовательский графический режим, однопользовательский текстовой режим, и т. п. Для перевода ОС в то или иное целевое состояние используются target-юниты. Целевые состояния системы являются более гибким аналогом уровней выполнения (runlevel) традиционной программы запуска операционной системы init.
Также есть специальные target-юниты, которые запускаются при определённом событии и не влияют на целевое состояние ОС. Например, при подключении к компьютеру принтера автоматически активируется юнит printer.target (см. справку "man systemd.special").
Для отображения текущего целевого состояния ОС (запущенного target-юнита) используется команда:
Для перевода ОС в целевое состояние используется команда:
При запуске команды:
- запускаются все юниты (если они ещё не запущены), которые соответствуют целевому состоянию операционной системы;
- останавливаются все остальные юниты. За исключением тех, которые имеют соответствующую настройку.
Для части юнитов есть укороченные команды без использования команды "isolate". Некоторые из них приведены в следующих подразделах текущего раздела.
Примеры target-юнитов:
| Юнит | Целевое состояние ОС |
|---|---|
| default.target | Юнит, который используется для запуска ОС. Обычно, это ссылка на |
| graphical.target | Многопользовательский графический режим ОС |
| multi-user.target | Многопользовательский текстовой режим ОС |
| rescue.target | Режим восстановления операционной системы |
| reboot.target | Перезагрузка ОС |
| poweroff.target | Выключение ОС с выключением питания компьютера |
3.2. Остановка и перезагрузка операционной системы
Для остановки ОС (перевода в целевое состояние poweroff.target) используется команда:
Для перезагрузки ОС (перевода в целевое состояние reboot.target) используется команда:
3.3. Режим восстановления операционной системы
В каких-то случаях может потребоваться режим восстановления ОС, при котором запущено минимальное количество процессов.
Для перехода в режим восстановления ОС используется команда:
После восстановления необходимо перевести ОС в нормальный режим работы. Для этого используется команда:
Для просмотра текущего режима работы ОС используется команда:
Возможные режимы работы ОС:
| Режим ОС | Описание |
|---|---|
initializing | Ранний этап загрузки ОС |
| starting | Поздний этап загрузки ОС |
| running | Нормальный режим работы ОС |
| degraded | ОС работает в нормальном режиме, но у каких-то юнитов есть ошибки |
| maintenance | ОС работает в режиме восстановления |
| stopping | Идёт процесс остановки работы менеджера systemd |
| offline | Менеджер systemd не запущен |
| unknown | Режим работы ОС не определён из-за нехватки ресурсов или по иной причине |
4. Управление юнитами
4.1. Запуск и остановка юнита
Для запуска (активирования) юнита используется команда:
Для остановки (деактивирования) юнита используется команда:
Для перезапуска юнита, т.е для остановки (если юнит был запущен) и последующего запуска юнита, используется команда:
4.2. Автозапуск юнита
Когда активируется target-юнит, менеджер systemd автоматически запускает другие юниты, которые связаны с активированным target-юнитом.
Так, при запуске ОС активируется юнит default.target, который переводит ОС в целевое состояние по умолчанию. При этом автоматически будут запущены все юниты, которые связаны с юнитом default.target.
Другой пример – при подключении принтера к компьютеру автоматически активируется специальный юнит printer.target. При этом автоматически будет запущен юнит cups.service, связанный с юнитом printer.target.
Чтобы связать юнит с target-юнитом, необходимо:
- в юнит-файле в опции "
WantedBy=" указать название target-юнита; - включить автозапуск юнита (если он не включен) с помощью команды "
systemctl enable <название_юнита>".
Для включения автозапуска юнита используется команда:
Для отключения автозапуска юнита используется команда:
4.3. Запуск (активирование) юнита по таймеру
С помощью timer-юнита можно активировать (запускать) другой юнит по таймеру: в заданное календарное время, с заданной периодичностью, через какое-то время после запуска ОС или регистрации пользователя в системе и т. д. Одновременно могут быть заданы разные таймеры.
Если в момент активации по таймеру юнит уже активен (запущен), то юнит не перезапускается, а остаётся в активном состоянии.
Название активируемого юнит-файла должно иметь суффикс отличный от .timer. Рекомендуется, чтобы названия файлов: активируемого юнита и timer-юнита – совпадали, за исключением суффикса. Например, logrotate.service и logrotate.timer.
Подробнее про timer-юнит см. статью "Использование таймеров systemd вместо заданий cron".
4.4. Отображение информации о юнитах
Для отображения состояния юнита, а также последней информации из журнала работы юнита, используется команда:
Для отображения иерархического дерева запущенных юнитов используется команда:
5. Журнал работы операционной системы и служб
Служба journald собирает и хранит журнал работы операционной системы и служб (юнитов).
Журнал хранятся в двоичном виде.
Параллельно с journald может работать другая служба журналирования, например, syslog-ng, чтобы вести набор классических текстовых журналов в каталоге /var/log/.
Подробнее о команде просмотра журнала см. справку "man journalctl" и статью "Анализ журналов системных служб Astra Linux".
Для отображения всех записей журнала, начиная с самой старой, используется команда:
Для отображения записей журнала, относящихся к юниту, используется команда:
С помощью опций, добавляемых к команде journalctl, можно настроить отображение журнала:
| Опция | Описание |
|---|---|
| -n [количество_записей] | Вывести самые последние записи журнала. Где [количество_записей] – число, отражающее количество выводимых записей. Чтобы прервать выполнение команды, необходимо нажать клавишу <Q> |
| -f | Вывести самые последние записи журнала, затем выводить записи по мере их поступления в журнал. По умолчанию выводится 10 записей. Чтобы прервать выполнение команды, необходимо нажать сочетание клавиш <CTRL+C> |
| -r | Изменить порядок вывода записей на обратный, чтобы самые новые записи выводились самыми первыми |
6. Расположение файлов и каталогов менеджера 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> – уникальный идентификатор локального компьютера. Идентификатор хранится в файле |