以机器可读的格式列出 Systemd 目标单元的依赖关系

以机器可读的格式列出 Systemd 目标单元的依赖关系

我有一个复杂的 systemd 目标单元,其中包含许多依赖单元。我想列出并解析这些单元的状态,而无需回到循环。

“list-dependencies”子命令只以点(彩色的,未以纯unicode再现)的形式给出状态,不太好解析。

> systemctl list-dependencies --no-page myunit.target
dcache.target
● ├─mytemplate@unit_foo.service
● ├─mytemplate@unit_bar.service
● ├─mytemplate@unit_baz.service
...

--no-page 标志似乎没有影响,无论有没有,输出都保持不变。

或者,

systemctl list-dependencies --plain myunit.target

仅列出依赖项,但不列出其当前状态

有没有办法从“systemctl list-dependencies”生成可解析或以 JSON 或类似格式输出?

答案1

Systemd 不支持任何开箱即用的 json api。请查看以下讨论:https://github.com/systemd/systemd/issues/83。此处获取机器可读输出的唯一方法是 --plain 版本,您提到过这个版本,它工作得非常好。您可以使用 systemctl 获取的状态信息是-active。因此,您需要编写一些脚本来获取所需的信息。对于您的特定问题,您只需使用:

systemctl list-dependencies --plain nginx | xargs -I {} sh -c 'echo -n {}": "; systemctl is-active {};'

相关内容