Содержание[Скрыть]
Введение
В последнее время многие дистрибутивы Linux перешли на systemd с других демонов инициализации (например, upstart). Systemd является гибким и быстрым инструментом для управления сервером с момента загрузки.
В данном руководстве мы рассмотрим наиболее важные команды для управления сервером с systemd.
Требования
Скалет с ОС версии не ниже, чем следующие:
- Ubuntu 15.04
- Debian 8
- CentOS 7
- Fedora 15
Управление юнитами
Базовый объект, которым управляет systemd — это юнит (unit). Юниты могут быть многих типов, но самый часто используемый тип юнита — это сервис (название оканчивается на «.service»). Для управления сервисами используется команда systemctl. Все команды обычного демона инициализации имеют аналог в systemctl. Продемонстрируем работу с данной командой на примере сервиса nginx.service.
Для начала, мы можем запустить сервис:
1 |
$ sudo systemctl start nginx.service |
Также, мы можем остановить его:
1 |
$ sudo systemctl stop nginx.service |
Или перезапустить:
1 |
$ sudo systemctl restart nginx.service |
Мы можем перечитать конфигурационные файлы без перезапуска сервиса с помощью команды:
1 |
$ sudo systemctl reload nginx.service |
Включение/отключение юнитов
По умолчанию, большинство юнитов не стартует автоматически при загрузке системы. Для конфигурирования этого поведения, необходимо включить юнит. Для того, чтобы сервис запускался автоматически при загрузке выполните команду:
1 |
$ sudo systemctl enable nginx.service |
Для отключения сервиса:
1 |
$ sudo systemctl disable nginx.service |
Получение состояния системы
Это очень значимая возможность systemd. Для примера, выведем список всех юнитов, числящихся активными в systemd:
1 |
$ systemctl list-units |
Пример вывода:
1 2 3 4 5 6 |
UNIT LOAD ACTIVE SUB DESCRIPTION atd.service loaded active running ATD daemon avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack dbus.service loaded active running D-Bus System Message Bus dcron.service loaded active running Periodic Command Scheduler<br>dkms.service loaded active exited Dynamic Kernel Modules System getty@tty1.service loaded active running Getty on tty1 |
UNIT: имя юнита LOAD: прочитан ли юнит systemd — загружен ли в память ACTIVE: состояние юнита — был ли успешно запущен SUB: более низкоуровневое и точное описание состояния юнита DESCRIPTION: текстовое описание предназначения юнита
Для вывода юнитов, которые загружены, или для которых была произведена попытка загрузки в память, но которые неактивны в данный момент, добавим параметр —all:
1 |
$ systemctl list-units --all |
Для вывода всех юнитов в системе, выполните:
1 |
$ systemctl list-unit-files |
Запрос состояния юнитов
Имеется также возможность получить информацию о состоянии отдельных юнитов.
Для показа состояния юнита, информации о процессе и последних записей лога — выполните (nginx.service — пример юнита):
1 |
$ systemctl status nginx.service |
Чтобы проверить, активен ли юнит в данный момент:
1 |
$ systemctl is-active nginx.service |
Для проверки, включен ли юнит, выполните команду:
1 |
$ systemctl is-enabled nginx.service |
Для вывода всех записей лога:
1 |
$ journalctl -u nginx.service |
Чтобы ограничить вывод последней загрузкой запустите, как обычно, с параметром -b:
1 |
$ journalctl -b -u nginx.service |
Инспектирование юнитов и юнит-файлов
У юнит-файлов есть и другие параметры, используемые systemd для управления ими. Для вывода полного содержимого юнит-файла выполните:
1 |
$ systemctl cat nginx.service |
Вывод дерева зависимостей юнита (то есть то, какие юниты будут запущены при старте указанного [юнита]):
1 |
$ systemctl list-dependencies nginx.service |
Для того, чтобы рекурсивно раскрыть зависимости второго и более уровней — добавьте параметр —all:
1 |
$ systemctl list-dependencies --all nginx.service |
Вывод низкоуровневой информации о юните (со значениями каждого параметра, используемого systemd):
1 |
$ systemctl show nginx.service |
Модификация юнит-файлов
При возникновении необходимости модификации юнит-файла, systemd предоставляет возможность сделать это напрямую — с помощью systemctl, без необходимости искать файл юнита на диске.
Для создания сниппета юнит-файла (сниппет может дополнять или перекрывать содержимое юнит-файла по умолчанию), выполните команду:
1 |
$ sudo systemctl edit nginx.service |
В случае необходимости модификации существующего содержимого юнит-файла, вместо создания сниппета, нужен параметр —full:
1 |
$ sudo systemctl edit --full nginx.service |
После модификации юнит-файла, необходимо перезагрузить процесс самого systemd, для подхвата изменений:
1 |
$ sudo systemctl daemon-reload |
Цели (уровни выполнения)
Одной из традиционных функций систем инициализации в Linux является помещение системы в то или иное состояние. В классических системах инициализации, эти состояния называются уровнями выполнения (в отдельный момент выполнения система может быть только на одном уровне выполнения).
В systemd существует понятие целей. Цели, это точки синхронизации, используемые сервером, чтобы переместиться в нужное состояние. Сервисы и другие юнит-файлы могут быть привязаны к цели. Возможна одновременная активация нескольких целей.
Вывод всех целей, доступных в системе:
1 |
$ systemctl list-unit-files --type=target |
Для просмотра цели по умолчанию, которую система пытается достичь при загрузке, выполните:
1 |
$ systemctl get-default |
Для изменения цели, привязанной к этапу загрузки, выполните:
1 |
$ sudo systemctl set-default multi-user.target |
Вывод юнитов, привязанных к указанной цели:
1 |
$ systemctl list-dependencies multi-user.target |
Отключение и перезагрузка сервера
Отключение:
1 |
$ sudo systemctl poweroff |
Перезагрузка:
1 |
$ sudo systemctl reboot |
Загрузка в режим восстановления:
1 |
$ sudo systemctl rescue |
Заключение
Итак, мы рассмотрели базовую функциональность утилиты systemctl. В следующих руководствах будут рассмотрены работа с journalctl и некоторые другие аспекты systemd.
Ваш комментарий будет первым