Поиск по сайту:

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


Введение

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

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

Базовое управление юнитами

Базовый объект, которым systemd управляет и на который воздействует, — это «юнит». Юниты могут быть разных типов, но наиболее распространенным типом является «сервис» (обозначается файлом юнитов, оканчивающимся на <.сервис). Для управления службами на сервере с поддержкой systemd нашим основным инструментом является команда systemctl.

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

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

  1. sudo systemctl start nginx.service

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

  1. sudo systemctl stop nginx.service

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

  1. sudo systemctl restart nginx.service

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

  1. sudo systemctl reload nginx.service

Включение или отключение юнитов

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

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

  1. sudo systemctl enable nginx.service

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

  1. sudo systemctl disable nginx.service

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

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

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

  1. systemctl list-units

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

  1. systemctl list-units --all

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

  1. systemctl list-unit-files

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

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

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

  1. journalctl

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

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

  1. journalctl -b

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

  1. journalctl -k

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

  1. journalctl -k -b

Запрос состояний единиц и журналов

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

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

  1. systemctl status nginx.service

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

  1. journalctl -u nginx.service

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

  1. journalctl -b -u nginx.service

Проверка модулей и файлов модулей

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

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

  1. systemctl cat nginx.service

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

  1. systemctl list-dependencies nginx.service

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

  1. systemctl list-dependencies --all nginx.service

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

  1. systemctl show nginx.service

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

Изменение файлов модулей

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

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

  1. sudo systemctl edit nginx.service

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

  1. sudo systemctl edit --full nginx.service

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

  1. sudo systemctl daemon-reload

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

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

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

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

  1. systemctl list-unit-files --type=target

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

  1. systemctl get-default

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

  1. sudo systemctl set-default multi-user.target

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

  1. systemctl list-dependencies multi-user.target

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

  1. sudo systemctl isolate multi-user.target

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

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

  1. sudo systemctl poweroff

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

  1. sudo systemctl reboot

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

  1. sudo systemctl rescue

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

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

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

  • Как использовать Systemctl для управления службами и модулями Systemd
  • Как использовать Journalctl для просмотра журналов Systemd и управления ими
  • Общие сведения о модулях Systemd и файлах модулей

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