systemd: получить статус цели ' s вспомогательные задания

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 со всеми этими единицами в качестве зависимостей.

Для более полного контекста:

  1. единицы и цель на самом деле являются пользовательскими единицами и целевыми единицами
  2. файл service.target состоит только из описания:

     #cat .config / systemd / user / service.target
    [Единица измерения]
    Описание = Глобальная цель службы
    Зависимости 
  3. 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  не дает достаточно стабильного вывода для анализа 

  4. systemctl --user status предоставит мне подробный обзор всех процессов, запущенных пользовательскими службами systemd, но я не знаю, как сузить этот список вплоть до «только службы в service.target»

  5. Вопрос

    Каков наиболее стабильный способ получения статуса всех служб, от которых зависит цель systemd?

    Следует ли нам изменить нашу настройку?

1
задан 26 July 2018 в 10:28
2 ответа

Во время поиска в 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 прокомментировал (правильно), что:

  1. Это не алфавитный
  2. ConsistsOf = в начале требует некоторой формы удаления перед передачей его другой команде

Я вижу следующие преимущества:

  1. Он перечисляет только элементы, которые объявлены как 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 =
     

    показывает пустой список

  2. Я не указывал это в своем исходном вопросе, но мы фактически используем некоторые дополнительные параметры ( backend.service может быть (скрытым) или (скрытым) или ...) При использовании списка-зависимостей на нашей цели каким-то образом (скрытый) попадает в список дважды:

     $ systemctl --user list-dependencies --plain service.target
    service.target
      (скрыто)
      (скрыто)
      db.service
      frontend.service
      scheduler.service
     
  3. само устройство указано в list-dependencies , но не в ConsistsOf

Так что мне все равно пришлось применить некоторую обработку к выходным данным.

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

1
ответ дан 3 December 2019 в 18:27

Теги

Похожие вопросы