Systemd Essentials: работа со службами, единицами и журналом

Вступление

В последние годы дистрибутивы Linux все чаще переходят от других систем инициализации к + systemd +. Набор инструментов + systemd + обеспечивает быструю и гибкую модель инициализации для управления всей машиной с момента загрузки.

В этом руководстве мы кратко рассмотрим наиболее важные команды, которые вы хотите знать для управления сервером с поддержкой + systemd +. Они должны работать на любом сервере, который реализует + systemd + (любая версия ОС на Ubuntu 15.04 или выше, Debian 8, CentOS 7, Fedora 15). Давайте начнем.

Основное управление подразделением

Базовый объект, которым + systemd + управляет и на который воздействует, является «единицей». Единицы могут быть разных типов, но наиболее распространенным типом является «служба» (обозначается файлом модуля, оканчивающимся на «+ .service ` »). Для управления службами на сервере с поддержкой ` systemd ` основным инструментом является команда ` systemctl +`.

Все нормальные системные команды init имеют эквивалентные действия с командой + systemctl +. Для демонстрации мы будем использовать модуль + nginx.service (чтобы получить этот файл службы, вам нужно установить Nginx вместе с менеджером пакетов).

Например, мы можем запустить сервис, набрав:

sudo systemctl start nginx.service

Мы можем остановить это снова, набрав:

sudo systemctl stop nginx.service

Чтобы перезапустить сервис, мы можем набрать:

sudo systemctl restart nginx.service

Чтобы попытаться перезагрузить службу, не прерывая нормальную работу, мы можем набрать:

sudo systemctl reload nginx.service

Включение или отключение единиц

По умолчанию большинство файлов модулей + systemd + не запускаются автоматически при загрузке. Чтобы настроить эту функцию, вам необходимо «включить» устройство. Это подключает его к определенной загрузочной «цели», вызывая его запуск при запуске этой цели.

Чтобы включить автоматический запуск службы при загрузке, введите:

sudo systemctl enable nginx.service

Если вы хотите снова отключить службу, введите:

sudo systemctl disable nginx.service

Получение обзора состояния системы

Существует много информации, которую мы можем получить с сервера + systemd +, чтобы получить общее представление о состоянии системы.

Например, чтобы получить все файлы модулей, которые + systemd + перечислил как «активные», введите (вы можете фактически опустить + list-unit +, так как это поведение по умолчанию + systemctl +):

systemctl list-units

Чтобы вывести список всех модулей, которые + systemd + загрузил или попытался загрузить в память, включая те, которые в данный момент не активны, добавьте переключатель + - all +:

systemctl list-units --all

Чтобы вывести список всех модулей, установленных в системе, включая те, которые + systemd + не пытался загрузить в память, введите:

systemctl list-unit-files

Просмотр основной информации журнала

Компонент + systemd + под названием + journald + собирает и управляет записями журнала из всех частей системы. Это в основном информация журнала из приложений и ядра.

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

journalctl

По умолчанию это покажет вам записи из текущей и предыдущей загрузки, если + journald + настроен для сохранения предыдущих загрузочных записей. В некоторых дистрибутивах это включено по умолчанию, в то время как в других нет (чтобы включить это, либо отредактируйте файл + / etc / systemd / journald.conf + и установите для опции + Storage = + значение «persistent», либо создайте постоянный каталог, набрав + sudo mkdir -p / var / log / journal +).

Если вы хотите видеть только записи журнала из текущей загрузки, добавьте флаг + -b +:

journalctl -b

Чтобы видеть только сообщения ядра, такие как те, которые обычно представлены + dmesg +, вы можете использовать флаг + -k +:

journalctl -k

Опять же, вы можете ограничить это только текущей загрузкой, добавив флаг + -b +:

journalctl -k -b

Запрос состояния блока и журналов

Хотя приведенные выше команды дали вам доступ к общему состоянию системы, вы также можете получить информацию о состоянии отдельных устройств.

Чтобы увидеть обзор текущего состояния устройства, вы можете использовать опцию + status + с командой + systemctl +. Это покажет вам, активен ли блок, информацию о процессе и последние записи журнала:

systemctl status nginx.service

Чтобы просмотреть все записи журнала для рассматриваемого модуля, задайте опцию + -u + с именем модуля для команды + journalctl +:

journalctl -u nginx.service

Как всегда, вы можете ограничить количество записей текущей загрузкой, добавив флаг + -b +:

journalctl -b -u nginx.service

Проверка юнитов и файлов юнитов

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

Файл модуля содержит параметры, которые + systemd + использует для управления и запуска модуля. Чтобы увидеть полное содержимое файла модуля, введите:

systemctl cat nginx.service

Чтобы увидеть дерево зависимостей модуля (какие модули + systemd + будет пытаться активировать при запуске модуля), введите:

systemctl list-dependencies nginx.service

Это покажет зависимые единицы измерения с рекурсивно развернутыми единицами + target +. Чтобы рекурсивно развернуть все зависимые юниты, передайте флаг + - all +:

systemctl list-dependencies --all nginx.service

Наконец, чтобы увидеть низкоуровневую информацию о настройках устройства в системе, вы можете использовать опцию + show +:

systemctl show nginx.service

Это даст вам значение каждого параметра, которым управляет + systemd +.

Модификация файлов юнитов

Если вам нужно внести изменения в файл модуля, + systemd + позволяет вам вносить изменения в самой команде + systemctl +, чтобы вам не приходилось переходить к месту на диске.

Чтобы добавить фрагмент файла модуля, который можно использовать для добавления или переопределения настроек в файле модуля по умолчанию, просто вызовите параметр + edit + на модуле:

sudo systemctl edit nginx.service

Если вы предпочитаете модифицировать все содержимое файла модуля вместо создания фрагмента, передайте флаг + - full +:

sudo systemctl edit --full nginx.service

После изменения файла модуля вы должны перезагрузить сам процесс + systemd +, чтобы получить ваши изменения:

sudo systemctl daemon-reload

Использование целей (уровней запуска)

Другая функция системы инициализации - перевод самого сервера между различными состояниями. Традиционные системы инициализации обычно называют их «уровнями выполнения», что позволяет системе находиться только на одном уровне выполнения в любой момент времени.

В + systemd + вместо него используются «цели». Цели - это, в основном, точки синхронизации, которые сервер может использовать для приведения сервера в определенное состояние. Служебные и другие файлы юнитов могут быть привязаны к цели, и одновременно могут быть активны несколько целей.

Чтобы увидеть все цели, доступные в вашей системе, введите:

systemctl list-unit-files --type=target

Чтобы просмотреть цель по умолчанию, которую + systemd + пытается достичь при загрузке (которая, в свою очередь, запускает все файлы модулей, составляющие дерево зависимостей этой цели), введите:

systemctl get-default

Вы можете изменить цель по умолчанию, которая будет использоваться при загрузке, используя опцию + set-default +:

sudo systemctl set-default multi-user.target

Чтобы увидеть, какие юниты привязаны к цели, вы можете набрать:

systemctl list-dependencies multi-user.target

Вы можете изменить состояние системы для перехода между целями с помощью опции + isolate +. Это остановит все юниты, которые не привязаны к указанной цели. Убедитесь, что цель, которую вы изолируете, не останавливает никаких важных услуг

sudo systemctl isolate multi-user.target

Остановка или перезагрузка сервера

Для некоторых основных состояний, в которые может перейти система, имеются ярлыки. Например, чтобы выключить сервер, вы можете набрать:

sudo systemctl poweroff

Если вы хотите перезагрузить систему, это можно сделать, набрав:

sudo systemctl reboot

Вы можете загрузиться в режиме восстановления, набрав:

sudo systemctl rescue

Обратите внимание, что большинство операционных систем включают традиционные псевдонимы для этих операций, так что вы можете просто набрать + sudo poweroff + или + sudo reboot + без + systemctl +. Однако это не гарантируется для всех систем.

Следующие шаги

К настоящему времени вы должны знать основы управления сервером, использующим + systemd +. Однако по мере расширения ваших потребностей можно многому научиться. Ниже приведены ссылки на руководства с более подробной информацией о некоторых компонентах, которые мы обсуждали в этом руководстве:

Узнав, как использовать сильные стороны вашей системы инициализации, вы сможете контролировать состояние своих компьютеров и упростить управление своими услугами и процессами.

Related