Systemctl-управление службами в Linux

Введение

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

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

Основы управления сервисами (юнитами)

Базовый объект, с которым работает systemd, называется “юнитом” (unit). Есть много видов юнитов, но самым распространенным является служба (service, файл юнита заканчивается на .service). Основным инструментом для управления службами на сервере является команда systemctl.

У всех команд обычной системы инициализации есть эквиваленты в systemctl. В примерах мы будем использовать службу nginx.service. Если у вас её нет, установите ее при помощи менеджера пакетов.

Для запуска службы нужно ввести:

systemctl start nginx.service

Остановка осуществляется следующей командой:

systemctl stop nginx.service

Перезапуск службы:

systemctl restart nginx.service

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

systemctl reload nginx.service

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

По умолчанию большинство файлов юнитов systemd не запускаются при загрузке автоматически. Для настройки этой функции требуется “включить” юнит. Он привязывается к “цели” загрузки и запускается, когда выполняется это целевое действие.

Для включения автоматическооо запуска при загрузке введите:

systemctl enable nginx.service

Если нужно снова отключить службу:

systemctl disable nginx.service

Получение данных о состоянии системы

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

Например, чтобы получить список юнитов, которые systemd считает активными, нужно выполнить следующую команду (можно даже не использовать опцию list-units, потому что она подразумевается по умолчанию):

sudo systemctl list-units

Для вывода списка юнитов, которые systemd загружал или пытался загрузить в память, в том числе не активные в данный момент, нужно указать опцию —all:

sudo systemctl list-units —all

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

sudo systemctl list-unit-files

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

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

systemctl status nginx.service

Файлы юнитов и зависимости

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

systemctl cat nginx.service

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

systemctl list-dependencies nginx.service

 

Вывод списка зависимых юнитов, которые будут рекурсивно раскрыты. Для полного рекурсивного раскрытия всех зависимых юнитов (второй и большие уровни зависимости), воспользуйтесь опцией —all:

systemctl list-dependencies --all nginx.service

Для просмотра низкоуровневых данных о настройках юнита в системе используется опция show. В этом случае выводится значение каждого параметра, управляемого systemd:

systemctl show nginx.service

Изменение файлов юнитов

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

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

sudo systemctl edit nginx.service

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

sudo systemctl edit --full nginx.service

После изменения файла юнита нужно перезагрузить сам процесс systemd для принятия изменений:

sudo systemctl daemon-reload

Использование целей

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

 

Цель Уровень
poweroff.target 0
rescue.target 1
multi-user.target 2
multi-user.target 3
multi-user.target 4
graphical.target 5
reboot.target 6

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

systemctl list-units --type=target

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

systemctl get-default

multi-user.target соответствует третьему уровню запуска, проверить это можно командой

runlevel

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

systemctl set-default graphical.target

Для просмотра привязанных к цели юнитов можно выполнить следующую команду:

systemctl list-dependencies multi-user.target

Изменять состояние системы для перехода между можно при помощи isolate (изолировать). Она останавливает все юниты, не привязанные к указанной цели. Убедитесь что изолируемая вами цель не останавливает важные службы. Например команда

systemctl isolate reboot.target

Перезагрузит вашу систему.

Выключение и перезагрузка сервера

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

sudo systemctl poweroff

Перезагрузка системы:

sudo systemctl reboot

Загрузка в режиме восстановления:

sudo systemctl rescue

В большинстве операционных систем для этих операций есть стандартные алиасы, так что можно просто ввести

sudo poweroff

или

sudo reboot

без systemctl, но их может и не быть.

Заключение

Мы рассмотрели основы управления юнитами и службами при помощи команды systemctl, а также познакомились с концепцией целей. Для более подробной информации можно обратиться к соответствующим man-страницам

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

ИТ Проффи

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: