Назад | Перейти на главную страницу

Как найти отказавшие службы systemd?

Когда я бегу systemctl status на конкретном сервере я получаю следующий вывод:

● ⟨host-name⟩
    State: degraded
     Jobs: 0 queued
   Failed: 1 units
    Since: Fr 2017-06-09 00:34:27 UTC; 1 weeks 5 days ago
   CGroup: /
…

Как я могу узнать, какая из служб вышла из строя?

Я пробовал это с systemctl is-failed '*', но это не дает значимого вывода (выводится 39 строк active один failed строка, а затем еще несколько (> 100) activeлинии…).

Пытаться

sudo systemctl list-units --failed

или

sudo systemctl list-units --state=failed

Похоже is-failed неверная подкоманда… кто бы мог подумать.

Вот несколько хакеров на Perl, чтобы получить правильный ответ:

$ systemctl list-units | perl -lanE'print if $F[2] !~ /active/'
  UNIT    LOAD   ACTIVE SUB       DESCRIPTION
● vboxautostart-service.service                                                             loaded failed failed    vboxautostart-service.service

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

207 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

И systemctl также приятно загромождать stderr информационным выводом таким образом, чтобы мы получали только тот вывод, который нам нужен.