Управление службами

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

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

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

Запуск/остановка

Чтобы запустить службу systemd, используя инструкции в файле модуля службы, используют команду start. Если работа осуществляется в качестве пользователя без прав root, то потребуется использовать sudo, поскольку это влияет на состояние JC:

sudo systemctl start application.service

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

sudo systemctl start application

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

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

sudo systemctl stop application.service

Перезапуск

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

sudo systemctl restart application.service

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

sudo systemctl reload application.service

Если нет уверенности в наличии у службы функции перезагрузки своей конфигурации, можно использовать команду reload-or-restart. Это перезагрузит необходимую конфигурацию только при наличии. В противном случае будет перезагружена служба для выбора новой конфигурации:

sudo systemctl reload-or-restart application.service

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

sudo systemctl daemon-reload

Включение/выключение

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

Для запуска службы во время загрузки используют команду enable:

sudo systemctl enable application.service

При этом будет создана символическая ссылка из системной копии служебного файла (обычно в /lib/systemd/system или /etc/systemd/system) в месте на диске, где systemd ищет файлы для автозапуска (обычно /etc/systemd/system/some_target.target.wants).

Для того чтобы добавить службу в автозагрузку без перезагрузки Системы, можно использовать флаг --now:

sudo systemctl enable --now application.service

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

sudo systemctl disable application.service

При этом будет удалена символическая ссылка, что укажет на то, что служба не должна запускаться автоматически.

Следует учитывать, что включение службы не запустит ее в текущем сеансе. Если требуется запустить службу и включить ее при загрузке, необходимо задать обе команды start и enable.

Проверка статуса

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

systemctl status application.service

При этом будет показан статус службы, иерархия контрольных групп и первые несколько строк журнала.

Также есть методы для проверки определенных статусов. Например, чтобы проверить, активен ли (работает ли) модуль в данный момент, можно использовать команду is-active:

systemctl is-active application.service

Это вернет текущий статус модуля, который обычно active или inactive. Код выхода будет "0", если он активен, и результат будет проще парсить в скрипты оболочки.

Чтобы увидеть, включен ли модуль, можно использовать команду is-enabled:

systemctl is-enabled application.service

Это выведет информацию о том, что служба enabled или disabled, и снова установит код выхода на "0" или "1" в зависимости от вопроса команды.

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

systemctl is-failed application.service

Это вернет active, если он работает должным образом, или failed, если возникла ошибка. Если модуль был намеренно остановлен, может вернуться unknown или inactive. Статус выхода "0" означает, что произошел сбой, а статус выхода "1" указывает на какой-либо другой статус.