Одним из самых интересных фрагментов этого вывода является имя группы управления. В приведенном примере группа управления не содержит никакой информации, кроме имени systemd:/system/media.mount, поскольку процессы модуля уже остановлены. Однако, если вы запросите статус модуля службы, например NetworkManager.service, вы увидите также дерево процессов группы управления. Можно увидеть группы управления без сопутствующего статуса модуля с помощью команды systemd-cgls. О группах управления вы узнаете больше из подраздела 6.4.6.
Команда статуса отображает также последнюю информацию из журнала модуля (этот журнал записывает диагностическую информацию для каждого модуля).
Полный журнал модуля можно увидеть с помощью такой команды:
$ journalctl _SYSTEMD_UNIT=unit
Синтаксис немного странный, поскольку команда journalctl способна получать доступ не только к модулю systemd.
Для активизации, деактивизации и перезапуска модулей используйте команды systemd start, stop и restart. Однако если вы изменили файл конфигурации модуля, можно перезагрузить такой файл одним из двух способов:
• systemctl reload unit — перезагружает только конфигурацию модуля unit;
• systemctl daemon-reload — перезагружает конфигурацию всех модулей.
Запросы на активизацию, повторную активизацию и перезапуск модулей известны как
$ systemctl list-jobs
Если система уже работает некоторое время, то вполне разумно ожидать, что в ней не будет активных заданий, поскольку все процессы активизации должны быть завершены. Однако во время загрузки системы иногда можно войти в нее настолько быстро, чтобы успеть заметить несколько очень медленно запускающихся модулей, которые еще не полностью активны. Например:
JOB UNIT TYPE STATE
1 graphical.target start waiting
2 multi-user.target start waiting
71 systemd-...nlevel.service start waiting
75 sm-client.service start waiting
76 sendmail.service start running
120 systemd-...ead-done.timer start waiting
В данном случае задание 76, запуск модуля sendmail.service, действительно происходит довольно долго. Остальные перечисленные задания находятся в ждущем режиме, скорее всего, потому, что все они ждут задание 76. Когда служба sendmail.service завершит запуск и станет полностью активна, задание 76 и все остальные задания также будут завершены, а список заданий станет пустым.
примечание
Термин задание может сбивать с толку еще и потому, что другая версия команды init, Upstart, описанная в данной главе, использует слово «задание» (в общих чертах) применительно к тому, что команда systemd называет модулем. Важно помнить о том, что, если задание команды systemd, связанное с каким-либо модулем, будет завершено, сам модуль останется активным и в дальнейшем работающим, особенно в случае модулей служб.
Обратитесь к разделу 6.7, чтобы узнать о том, как выключать и перезапускать систему.
6.4.5. Добавление модулей в команду systemd
Добавление модулей заключается в создании, активизации и возможном редактировании файлов модулей. Обычно пользовательские файлы модулей следует помещать в каталог системной конфигурации /etc/systemd/system, чтобы не перепутать их с чем-либо, входящим в состав вашей версии системы, и чтобы система не перезаписала их при обновлении.
Поскольку довольно просто создать целевые модули, которые ничего не делают и ни на что не влияют, давайте попробуем. Ниже приведена процедура создания двух целевых модулей, один из которых зависит от другого.
1. Создайте файл модуля с именем test1.target:
[Unit]
Description=test 1
2. Создайте файл test2.target с зависимостью от файла test1.target:
[Unit]
Description=test 2
Wants=test1.target
3. Активизируйте модуль test2.target (помня о том, что зависимость в файле test2.target вынуждает команду systemd активизировать при этом и модуль test1.target):
# systemctl start test2.target
4. Убедитесь в том, что оба модуля активны:
# systemctl status test1.target test2.target
test1.target–test 1
Loaded: loaded (/etc/systemd/system/test1.target; static)
Active: active since Thu, 12 Nov 2015 15:42:34 -0800; 10s ago
test2.target–test 2
Loaded: loaded (/etc/systemd/system/test2.target; static)
Active: active since Thu, 12 Nov 2015 15:42:34 -0800; 10s ago
примечание
Если в файле модуля есть секция [Install], подключите модуль до его активизации:
# systemctl enable unit
Опробуйте это на предыдущем примере. Удалите зависимость из файла test2.target и добавьте секцию [Install] в файл test1.target, содержащую строку WantedBy=test2.target.
Удаление модулей. Чтобы удалить модуль, выполните следующее.
1. Если необходимо, деактивизируйте модуль: