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