Вступление
В последние годы дистрибутивы 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 +
. Однако по мере расширения ваших потребностей можно многому научиться. Ниже приведены ссылки на руководства с более подробной информацией о некоторых компонентах, которые мы обсуждали в этом руководстве:
Узнав, как использовать сильные стороны вашей системы инициализации, вы сможете контролировать состояние своих компьютеров и упростить управление своими услугами и процессами.