6.4 Управление целями загрузки Linux (Managing Linux Boot Targets)¶
В дополнение к традиционному демону init, который управляет практически всем в вашей системе Linux, вместо init можно использовать два альтернативных демона для управления запуском задач и уровнями выполнения в Linux:
- Upstart
- systemd
Upstart был представлен в середине 2000-х годов и был принят весьма прохладно. Главная проблема состояла в том, что он разительно отличался от init и требовал значительных усилий для освоения. В результате лишь очень ограниченное число дистрибутивов Linux по-прежнему его использует.
Однако systemd появился лишь несколько лет назад и фактически занял господствующее положение. Большинство дистрибутивов Linux сегодня начали переход от init к systemd. Как и Upstart, systemd является заменой традиционного демона init. Однако, в отличие от Upstart, systemd может функционировать как полнозначная замена init. Если вы знакомы с init, переход на systemd окажется значительно менее болезненным.
Одно из преимуществ systemd — возможность загружать службы параллельно при запуске системы. Традиционный процесс init запускает службы по одной в последовательном порядке. Параллельный запуск служб позволяет значительно сократить время, необходимое для приведения системы в рабочее состояние. Демон systemd также поддерживает снимки состояния (snapshots), которые предоставляют возможность при необходимости восстановить состояние системы.
В связи с широкой распространённостью systemd мы сосредоточимся именно на нём в этой главе. Необходимо рассмотреть следующие темы:
- Управление целями загрузки
- Управление службами
Начнём с того, как управлять уровнями выполнения в системе Linux, использующей systemd.
Управление целями загрузки (Managing Boot Targets)¶
Если вы знакомы с уровнями выполнения в init, то работа с уровнями выполнения в systemd будет для вас достаточно понятной. Команды для управления уровнями выполнения в systemd отличаются, однако концепции схожи. Одна из ключевых особенностей systemd состоит в том, что он использует концепцию целей загрузки (boot targets), которые функционируют аналогично уровням выполнения. Каждая цель загрузки представлена файлом в /usr/lib/systemd/system с расширением .target. В приведённом ниже списке традиционные уровни выполнения init показаны вместе с соответствующими файлами целей загрузки systemd:
- runlevel 3 =
multi-user.targetилиrunlevel3.target - runlevel 5 =
graphical.targetилиrunlevel5.target
Обратите внимание, что для каждого уровня выполнения предусмотрено два файла целей. Следует знать, что runlevel3.target — это лишь символьная ссылка, указывающая на файл multi-user.target. Аналогично, файл runlevel5.target является символьной ссылкой, указывающей на файл graphical.target.
В системе, использующей systemd, для управления службами и уровнями выполнения применяется команда systemctl. Вместо init, chkconfig или service для управления большинством аспектов системы на базе systemd используется systemctl. Например, для смены уровней выполнения нужно выполнить systemctl и указать конкретную цель загрузки. Синтаксис: systemctl isolate цель_загрузки.
Например, чтобы переключиться в эквивалент уровня выполнения 5 в systemd, можно ввести любую из следующих команд:
systemctl isolate runlevel5.targetsystemctl isolate graphical.target
И точно так же, как в случае с традиционным процессом init, изменение цели загрузки «на лету» с помощью systemd изменяет только текущий уровень выполнения. При перезагрузке системы она снова загрузится в уровень выполнения по умолчанию. В systemd для задания уровня выполнения по умолчанию файл inittab больше не используется. Вместо этого файл /etc/systemd/system/default.target управляет целью загрузки по умолчанию. Как видно из следующего примера, этот файл фактически является символьной ссылкой, указывающей на файл цели загрузки, который должен использоваться по умолчанию:
openSUSE:/etc/systemd/system # ls -l default.target
lrwxrwxrwx 1 root root 40 Nov 12 09:05 default.target ->
/usr/lib/systemd/system/runlevel5.target
Примечание
Некоторые дистрибутивы, использующие systemd, по-прежнему сохраняют файл inittab для обратной совместимости.
Чтобы изменить цель загрузки по умолчанию, необходимо изменить файл загрузки, на который указывает данная символьная ссылка. Это делается с помощью команды systemctl set-default цель_загрузки. Например, чтобы задать в качестве цели загрузки по умолчанию графический режим, следует ввести systemctl set-default graphical.target или systemctl set-default runlevel5.target.
Чтобы просмотреть текущий уровень выполнения, введите systemctl get-default. Пример показан здесь:
Рассмотрим теперь управление службами в системе Linux, использующей systemd.
Управление службами (Managing Services)¶
Управление системными демонами в системе на базе systemd осуществляется примерно так же, как и в системе на базе init. Однако используемая команда отличается. Если вам нужно остановить, запустить, перезапустить службу или просмотреть её состояние, введите systemctl, затем выполняемое действие, а затем имя службы. Используйте следующий синтаксис:
- Для запуска службы введите
systemctl start служба.service. Например, чтобы запустить демонntp, введитеsystemctl start ntp.service. - Для остановки службы введите
systemctl stop служба.service. Например, чтобы остановить демонntp, введитеsystemctl stop ntp.service. - Для перезапуска службы введите
systemctl restart служба.service. Например, чтобы перезапустить демонntp, введитеsystemctl restart ntp.service. - Для проверки состояния службы введите
systemctl status служба.service. Например, чтобы проверить состояние демонаntp, введитеsystemctl status ntp.service.
Команду systemctl можно также использовать для включения или отключения конкретной службы при загрузке системы, а также для проверки того, включена ли она. Для этого используются следующие команды:
- Для включения службы при запуске системы введите
systemctl enable служба.service. Например, чтобы включить демонntpпри загрузке системы, введитеsystemctl enable ntp.service. - Для отключения службы при запуске системы введите
systemctl disable служба.service. Например, чтобы отключить демонntpпри загрузке системы, введитеsystemctl disable ntp.service. - Чтобы проверить, включена ли служба при запуске системы, введите
systemctl is-enabled служба.service. Например, чтобы проверить состояние демонаntp, введитеsystemctl is-enabled ntp.service.
Упражнение 6-4. Работа с уровнями выполнения Linux
В этом упражнении вы попрактикуетесь в управлении целями загрузки в вашей системе Linux. Упражнение можно выполнить на виртуальной машине, прилагаемой к данной книге. Запустите снимок 6-2 для получения правильно настроенной среды.
VIDEO Посмотрите видео упражнения 6-4 с демонстрацией выполнения этого задания.
Выполните следующее:
- Загрузите систему Linux и войдите в систему как обычный пользователь с паролем
student. - Откройте сеанс терминала.
- Переключитесь на учётную запись суперпользователя root, введя
su –с последующим вводом пароля суперпользователя root (student). -
Измените цель загрузки по умолчанию на эквивалент уровня выполнения 3, выполнив следующее: a. Откройте сеанс терминала. b. В приглашении командной строки перейдите на учётную запись суперпользователя root с помощью команды
su –. c. В приглашении командной строки введитеsystemctl set-default multi-user.target. d. Перезагрузите систему, введяinit 6в приглашении командной строки.Обратите внимание, что эта команда по-прежнему работает, хотя система не использует демон
init. Система должна загрузиться в текстовую оболочку входа.e. Войдите в систему как суперпользователь root. f. В приглашении командной строки используйте команду
systemctlдля изменения цели загрузки по умолчанию обратно на графическую. g. Выключите систему, введяinit 0в приглашении командной строки. Снова обратите внимание, что команда работает, хотя система не использует демонinit. h. Включите систему и снова войдите в систему как обычный пользователь. -
Потренируйтесь в включении демона
d. Нажмитеntpпри загрузке системы. Выполните следующее: a. Откройте сеанс терминала и перейдите на учётную запись суперпользователя root. b. В приглашении командной строки введитеvi /etc/ntp.conf. c. Прокрутите до строк:Insert. e. Добавьте новую строку после строкиfudge. f. Добавьте следующую директиву на новой строке: Эта директива настраивает службуntpдля синхронизации времени локального компьютера с временем публичного NTP-сервераbigben.cac.washington.eduв Интернете. g. НажмитеEsc, затем введите:exit. h. Запустите службуntp, введяsystemctl start ntp.serviceв приглашении командной строки. i. Проверьте состояние демонаntp, введяsystemctl status ntp.serviceв приглашении командной строки.
Завершим эту главу обсуждением процедуры завершения работы системы Linux.