出于好奇而提问。
以下命令应列出所有已加载的单元
systemctl list-units --type service --all
但实际上它并没有列出所有已加载的服务,仅列出那些已启用或活动或(活动并启用)的服务。
例如:
[root@roman-centos system]# systemctl list-units --type service --all | grep httpd
[root@roman-centos system]# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Docs: man:httpd(8)
man:apachectl(8)
这是应该的方式还是可能是文档/代码错误?
答案1
“已加载”意味着 systemd 已将单元从磁盘读取到内存中。每当您“查看”该单元(例如状态)、该单元启动时或该单元是另一个已加载单元的依赖项时,就会发生这种情况。
这里的误解是“systemctl status”会总是将单元显示为“已加载”,因为 systemd 加载单元以显示状态。如果该装置不再需要用于其他用途,则会立即卸载。
如果要显示磁盘上找到的所有可能单元的列表,请使用“systemctl list-unit-files”。
答案2
的权威文档systemctl
不是 Red Hat 文档,而是man systemctl
.根据man systemctl
:
`--type service` should "limit the output to only services."
`--all` should "how all loaded units, regardless of their state, including inactive units. "
所以你给出的命令应该列出所有加载的服务单位,无论其状态如何,包括非活动单位。
在版本 229的 Ubuntu 16.04 上进行测试时systemd
,我重现了输出中未报告已加载但已禁用的单元的问题,这确实与记录的行为相符。
由于该行为与文档相符,因此这似乎是 systemd 中的一个错误。我有使用 systemd 打开错误报告关于这个问题。