TL; DR
Как мне получить представление о состоянии всех служб на цели?
что-то вроде:
# obviously, 'systemctl status' does not have this output :
$ systemctl --user status service.target
service.target: inactive (dead)
├── backend.service: active
├── db.service: active
├── frontend.service: active
└── scheduler.service: inactive (dead)
Контекст
У нас есть несколько модулей systemd, которые являются частями более глобального сервиса, поэтому мы написали service.target
со всеми этими единицами в качестве зависимостей.
Для более полного контекста:
файл service.target
состоит только из описания:
#cat .config / systemd / user / service.target
[Единица измерения]
Описание = Глобальная цель службы
Зависимости
service.target
перечислены в файловой системе:
$ tree .config / systemd / user
├── backend.service
├── db.service
├── frontend.service
├── scheduler.service
├── service.target
└── service.target.requires
├── backend.service -> ../backend.service
├── db.service -> ../db.service
├── frontend.service -> ../frontend.service
└── scheduler.service -> ../scheduler.service
target
не дает достаточно стабильного вывода для анализа
systemctl --user status
предоставит мне подробный обзор всех процессов, запущенных пользовательскими службами systemd, но я не знаю, как сузить этот список вплоть до «только службы в service.target»
Вопрос
Каков наиболее стабильный способ получения статуса всех служб, от которых зависит цель systemd?
Следует ли нам изменить нашу настройку?
Эта тема недавно обсуждалась в Как создать виртуальную службу systemd для одновременной остановки / запуска нескольких экземпляров? .
Список вариантов:
systemctl status $ (systemctl list-dependencies --plain your.target)
Во время поиска в systemd я обнаружил следующее команда дает мне более прямой список служб, которые я хочу проверить:
systemctl --user show --property=ConsistsOf your.target
Она имеет дополнительное преимущество, возвращая ""
для базовых служб:
$ systemctl --user show --property=ConsistsOf service.target
ConsistsOf=backend.service db.service frontend.service scheduler.service
$ systemctl --user show --property=ConsistsOf backend.service
ConsistsOf=
@MarkStosberg прокомментировал (правильно), что:
ConsistsOf =
в начале требует некоторой формы удаления перед передачей его другой команде Я вижу следующие преимущества:
Он перечисляет только элементы, которые объявлены как PartOf
моей цели:
например, когда я использую список-зависимостей
на db.service
, я вижу:
$ systemctl --user list-dependencies --plain db.service
db.service
-.ломтик
базовый.цель
paths.target
sockets.target
dirmngr.socket
gpg-agent-browser.socket
gpg-agent-extra.socket
gpg-agent-ssh.socket
gpg-agent.socket
timers.target
(что технически верно, но не имеет отношения к моему варианту использования) while:
$ systemctl --user show --property = ConsistsOf db.service
ConsistsOf =
показывает пустой список
Я не указывал это в своем исходном вопросе, но мы фактически используем некоторые дополнительные параметры ( backend.service
может быть (скрытым) или (скрытым) или ...)
При использовании списка-зависимостей
на нашей цели каким-то образом (скрытый) попадает в список дважды:
$ systemctl --user list-dependencies --plain service.target
service.target
(скрыто)
(скрыто)
db.service
frontend.service
scheduler.service
само устройство указано в list-dependencies
, но не в ConsistsOf
Так что мне все равно пришлось применить некоторую обработку к выходным данным.
Просто поделился своим опытом; спасибо за ваш ответ и указания, которые указали мне правильное направление.