Linux Labs

Система изнутри: ресурсы, ядро, процессы / Ступень 10 из 12

От GRUB до target: как загружается система

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 5 из 8 · на машине · 6 мин

Цели загрузки

Цель (target) — юнит без своей программы: веха «система дошла до такого состояния».

С multi-user.target ты встречался в уроке о состояниях служб: это обычное рабочее состояние сервера, и enable подключает к нему службы по строке WantedBy= из секции [Install]. До какой цели идёт загрузка, печатает systemctl get-default, а что к цели подключено — systemctl list-dependencies:

bash
systemctl get-default
systemctl list-dependencies multi-user.target | head -n 8

Внутри загрузки есть и цели-вехи: sysinit.target и basic.target из critical-chain, network.target — сеть настроена, network-online.target — сеть готова к соединениям. Службе, которой нужна сеть, пишут Wants= и After=network-online.target, — так сделано у nginx на этой машине. Эта цель и держала загрузку в начале урока: служба ожидания сети systemd-networkd-wait-online ждёт, пока сеть поднимется, — на серверах до двух минут. У учебной машины сети нет, поэтому в образе ожидание выключено, а подготовка опыта включила его с пределом 10 секунд. Ждал и твой терминал: приглашение появилось только после ожидания сети.

Проверь себя 1 вопрос

В юните службы есть After=network-online.target, а Wants= нет, и никакой другой юнит эту цель не тянет. Что будет при загрузке?

  • After= только упорядочивает юниты, которые и так запускаются. Цель никто не запустил — ждать нечего.

  • After= — не зависимость: если цели нет в загрузке, это запуск не отменяет. Отменить его мог бы только Requires=.

After= действует, только когда оба юнита запускаются. Цель network-online.target в загрузку тянет чей-то Wants= — поэтому служба, которой нужна сеть, пишет оба: Wants= и After=.

Ошибку в юните лучше найти до перезагрузки: systemd-analyze verify <юнит> проверяет файл и печатает, что systemd в нём не поймёт, — например, Unknown key name 'Afer' на строку с опечаткой. Такую строку systemd при загрузке молча пропустит, и порядок из неё не сработает.

Главное в шаге

  • Цель — веха загрузки; загрузка идёт до цели из systemctl get-default, на сервере — multi-user.target.
  • Служба, которой нужна сеть, ждёт network-online.target строками Wants= и After=.
  • systemd-analyze verify находит ошибки юнита до того, как они всплывут при загрузке.
Ubuntu 24.04
Загрузка…