systemD 已加载与已启用单元状态

systemD 已加载与已启用单元状态

出于好奇而提问。

根据 RHEL7 系统管理指南 (https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sect-Managing_Services_with_systemd-Services.html#sect-Managing_Services_with_systemd-Services-List

以下命令应列出所有已加载的单元

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 打开错误报告关于这个问题。

相关内容