Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 116 Следующий »

Введение

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

Управляет службой, запущенной НЕ менеджером systemd.

Scope-юнит создаётся программно через API-интерфейс менеджера systemd. Этим он отличается от service-юнита, который описывается с помощью юнит-файла

Управление операционной системой

Состояния операционной системы

Операционная система находится в одном из состояний: выключена, многопользовательский графический режим, однопользовательский текстовой режим, и т. п.

Для перевода ОС в то или иное состояние используются target-юниты.

При запуске target-юнита:

  • запускаются все юниты (если они ещё не запущены), которые соответствуют целевому состоянию операционной системы;
  • останавливаются все остальные юниты. За исключением тех, которые имеют соответствующую настройку.

Целевые состояния системы являются более гибким аналогом уровней выполнения (runlevel) традиционной программы запуска операционной системы init.


Для отображения текущего целевого состояния ОС (запущенного target-юнита) используется команда:

systemctl get-default


Для перевода ОС в целевое состояние используется команда:

sudo systemctl isolate <название_target_юнита>

Для некоторых юнитов есть укороченные команды без использования слова "isolate". Ряд этих команд приведён в нижеследующих подразделах.


Назначение некоторых target-юнитов:

ЮнитЦелевое состояние ОС
default.target

Юнит, который используется для запуска ОС.

Обычно, это ссылка на graphical.target или multi-user.target

graphical.targetМногопользовательский графический режим ОС
multi-user.targetМногопользовательский текстовой режим ОС
rescue.targetРежим восстановления операционной системы
reboot.targetПерезагрузка ОС
poweroff.targetВыключение ОС с выключением питания компьютера

Остановка и перезагрузка операционной системы

Для остановки ОС используется команда:

sudo systemctl poweroff


Для перезагрузки ОС используется команда:

sudo systemctl reboot

Режим восстановления операционной системы

В каких-то случаях может потребоваться режим восстановления ОС, при котором запущено минимальное количество процессов.

Для перехода в режим восстановления ОС используется команда:

sudo systemctl rescue


После восстановления необходимо перевести ОС в нормальный режим работы. Для этого используется команда:

sudo systemctl default


Для просмотра текущего режима работы ОС используется команда:

sudo systemctl is-system-running

Возможные режимы работы ОС:

Режим ОСОписание

initializing

Ранний этап загрузки ОС
starting
Поздний этап загрузки ОС
running
Нормальный режим работы ОС
degraded
ОС работает в нормальном режиме, но у каких-то юнитов есть ошибки
maintenance
ОС работает в режиме восстановления
stopping
Идёт процесс остановки работы менеджера systemd
offline
Менеджер systemd не запущен
unknown
Режим работы ОС не определён из-за нехватки ресурсов или по иной причине

Управление юнитами

Запуск и остановка юнита

Для запуска (активирования) юнита используется команда:

sudo systemctl start <название_юнита>


Для остановки (деактивирования) юнита используется команда:

sudo systemctl stop <название_юнита>


Для перезапуска юнита, т.е для остановки (если юнит был запущен) и последующего запуска юнита, используется команда:

sudo systemctl restart <название_юнита>

Автозапуск юнита

Менеджер systemd может автоматически запускать юниты, например, при загрузке ОС или при подключении к компьютеру определённого оборудования.


Для включения автозапуска юнита используется команда:

sudo systemctl enable <название_юнита>


Для отключения автозапуска юнита используется команда:

sudo systemctl disable <название_юнита>

Активирование юнита по таймеру

С помощью timer-юнита можно активировать (запускать) другой юнит по таймеру: в заданное календарное время, с заданной периодичностью, через какое-то время после запуска ОС или регистрации пользователя в системе. Одновременно могут быть заданы разные типы таймеров.

Если в момент активации по таймеру юнит уже активен (запущен), то юнит не перезапускается, а остаётся в активном состоянии.

Название активируемого юнит-файла должно иметь суффикс отличный от .timer. Рекомендуется, чтобы названия файлов: активируемого юнита и timer-юнита – совпадали, за исключением суффикса. Например, logrotate.service и logrotate.timer.

Подробнее см. статью "Использование таймеров systemd вместо заданий cron".

Отображение информации о юнитах

Для отображения состояния юнита, а также последней информации из журнала работы юнита, используется команда:

sudo systemctl status <название_юнита>
$ sudo systemctl status ssh
● ssh.service - OpenBSD Secure Shell server
  Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
  Active: active (running) since Mon 2025-08-04 08:10:10 MSK; 8h ago
    Docs: man:sshd(8)
          man:sshd_config(5)
Main PID: 1242 (sshd)
   Tasks: 1 (limit: 2239)
  Memory: 1.2M
     CPU: 15ms
  CGroup: /system.slice/ssh.service
          └─1242 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups

авг 04 08:10:10 alse-vanilla-gui sshd[1242]: Server listening on 0.0.0.0 port 22.
авг 04 08:10:10 alse-vanilla-gui sshd[1242]: Server listening on :: port 22.
авг 04 08:10:10 alse-vanilla-gui systemd[1]: Starting OpenBSD Secure Shell server...
авг 04 08:10:10 alse-vanilla-gui systemd[1]: Started OpenBSD Secure Shell server.

где

  • в строке "  Loaded:" отображается:
        - /lib/systemd/system/ssh.service – путь к юнит-файлу;
        - enabled (после пути к юнит-файлу) – означает, что включён автозапуск юнита;
  • в строке "  Active:" отображается:
        - active (running) – означает, что юнит активен (служба запущена).


Для отображения иерархического дерева запущенных юнитов используется команда:

sudo systemctl status
$ sudo systemctl status 
rbta-ekb-lt-123456.astralinux.ru
    State: degraded
    Units: 523 loaded (incl. loaded aliases)
     Jobs: 0 queued
   Failed: 4 units
    Since: Tue 2025-08-05 08:50:54 +05; 7h ago
  systemd: 252.17-1~deb12u1astra.se3+ci2
   CGroup: /
           ├─1454 /opt/kaspersky/kesl/libexec/kesl
           ├─init.scope
           │ └─1 /sbin/init splash
           ├─system.slice
           │ ├─ModemManager.service
           │ │ ├─1334 /usr/sbin/ModemManager
           │ │ └─2478 /usr/libexec/mbim-proxy
           │ ├─NetworkManager.service
           │ │ ├─2071 /usr/sbin/NetworkManager --no-daemon
           │ │ ├─7647 /usr/lib/NetworkManager/nm-openconnect-service --bus-name org.freedesktop.NetworkManager.openconnect.Connection_4
           │ │ └─7737 /usr/sbin/openconnect --servercert pin-sha256:qTme6hdkT1xgmWjngi0kAL8AShIN2kAn5CfzpT/I/rI= --syslog --cookie-on-s>
           │ ├─accounts-daemon.service
           │ │ └─1647 /usr/libexec/accounts-daemon
           │ ├─acpid.service
           │ │ └─1235 /usr/sbin/acpid
           │ ├─assistant.service
           │ │ ├─  2902 /opt/assistant/bin/asts
           │ │ ├─  5642 sudo -u root -H /opt/assistant/bin/astrct -ISS:1 -PID:2902 -PIPE:/tmp/assistant/pipes/28CDA78A75FA4537BC586BE86>
           │ │ ├─  5654 /opt/assistant/bin/astrct -ISS:1 -PID:2902 -PIPE:/tmp/assistant/pipes/28CDA78A75FA4537BC586BE86F7CEB2E_63A9F0EA>
           │ │ ├─  6081 sudo -u sbutakov -H /opt/assistant/bin/astrct -ISS:1 -PID:2902 -PIPE:/tmp/assistant/pipes/28CDA78A75FA4537BC586>
           │ │ ├─  6083 /opt/assistant/bin/astrct -ISS:1 -PID:2902 -PIPE:/tmp/assistant/pipes/28CDA78A75FA4537BC586BE86F7CEB2E_A92E540C>
           │ │ └─114451 ps ax -o stat,comm
           │ ├─astra-event-diagnostics-healthcheck.service
           │ │ └─4711 /usr/bin/python3 /usr/bin/astra-event-diagnostics --healthcheck -c /etc/astra-event-diagnostics/astra-event-diagn>
           │ ├─auditd.service
           ...

Журнал работы операционной системы и служб

Служба journald собирает и хранит журнал работы операционной системы и служб (юнитов). Дополнительно см. статью "Анализ журналов системных служб Astra Linux".

Журнал хранятся в двоичном виде.

Параллельно с journald может работать другая служба журналирования, например, syslog-ng, чтобы вести набор классических текстовых журналов в каталоге /var/log/.

Подробнее о команде просмотра журнала см. справку "man journalctl".


Для отображения всех записей журнала, начиная с самой старой, используется команда:

sudo journalctl


Для отображения записей журнала, относящихся к юниту, используется команда:

sudo journalctl -u <название_юнита>


С помощью опций, добавляемых к команде journalctl, можно настроить отображение журнала:

ОпцияОписание
-n [количество_записей]

Вывести самые последние записи журнала.

Где [количество_записей] – число, отражающее количество выводимых записей.
Если [количество_записей] не указано, то будет выведено 10 записей.

Чтобы прервать выполнение команды, необходимо нажать клавишу <Q>

-f

Вывести самые последние записи журнала, затем выводить записи по мере их поступления в журнал.

По умолчанию выводится 10 записей.
Чтобы вывести иное количество записей, необходимо использовать опцию "-n [количество_записей]".

Чтобы прервать выполнение команды, необходимо нажать сочетание клавиш <CTRL+C>

-r

Изменить порядок вывода записей на обратный, чтобы самые новые записи выводились самыми первыми

Расположение файлов и каталогов менеджера 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

Файл с настройками службы журналирования journald

/var/log/journal/<machine-id>/

Каталог для постоянного хранения журнала работы ОС и служб (юнитов).

<machine-id> – уникальный идентификатор локального компьютера. Идентификатор хранится в файле /etc/machine-id

/run/log/journal/<machine-id>/

Каталог для временного хранения журнала работы ОС и служб (юнитов).

Каталог используется, если не доступен каталог /var/log/journal/  (например, во время старта ОС).

<machine-id> – уникальный идентификатор локального компьютера. Идентификатор хранится в файле /etc/machine-id



  • Нет меток