如何列出enabled的所有systemctl服务?

我知道运行systemctl命令本身会列出所有服务,但我只想获取enabled的服务。

评论

您启用是什么意思?您的意思是正在运行的服务?

@Gen启用服务与启动服务大不相同。请参见man systemctl。

迷人。评分最低的答案是最“正确”的答案,即使它显然不是最佳答案。这个极好的问题(及其答案)是一个有趣的例子,说明systemd如何违反Unix&Co长期存在的(精妙的)设计原则。 / systemctl可以完全满足他的要求(大多数有经验的用户只会考虑做到这一点)。我开始更清楚地看到为什么Linus Torvalds如此强烈地批评systemd。

#1 楼

systemctl list-unit-files | grep enabled将列出所有已启用的。

如果要当前运行的是哪个,则需要systemctl | grep running

使用所需的那个。已启用,并不意味着它正在运行。运行并不意味着它已启用。它们是两件事。

启用表示系统将在下次启动时运行服务。因此,如果启用了服务,则仍然需要手动启动或重新启动它,然后它才能启动。

运行意味着该服务现在正在实际运行,但是如果未启用,它将在以下时间重新启动您重新启动。

评论


不得不使用外部工具(grep)来显示此重要信息很烦人。但是谢谢你给我们展示了方式:)

–Felipe Alvarez
17 Feb 15'2:43



@FelipeAlvarez正确。但这就是Linux的工作方式。许多小型二进制文件相互配合。 systemctl执行要求的操作,列出服务。由于grep已经存在并且可以对任何程序的输出进行良好处理,因此systemctl中没有内置的过滤命令。一直都是这样:)

–多里安(Dorian)
17-2-16在16:01



我同意,应该这样。但是,systemd已经尝试做太多事情了,我想知道为什么它不能列出已启用的服务?

–Felipe Alvarez
17年2月18日在0:45

systemctl | grep running不向我列出任何内容!即使某项正在运行,也仅按照其状态列出:启用,禁用,屏蔽,静态

–Cirelli94
17年4月13日在10:34



更简单:systemctl list-unit-files --state =运行

–将
17年9月2日在10:40



#2 楼

man systemctl状态:

--state=
参数应为以逗号分隔的单位LOADSUBACTIVE状态的列表。列出单位时,仅显示处于指定状态的单位。使用--state=failed仅显示出现故障的单元。

说明:
LOAD:反映是否正确加载了单元定义。 ACTIVE:高级单位激活状态,即SUB的推广。 SUB:低级单元激活状态,值取决于单元类型。虽然您也可以使用它仅显示带有以下内容的enabled单元:
systemctl list-unit-files --state=enabled

如果单元是enabled,则表示系统将在启动时启动它。虽然将某项设置为enabled实际上也不会同时将其设置为start,所以您将需要手动执行此操作,或者将其设置为enabled后重新启动系统。

评论


要同时启用和启动:systemctl enable --now ...

–AurélienOoms
17年7月29日在20:24

--state = enabled对systemd版本215(在Raspbian 8 Jessie上)不起作用,但是在systemd版本229(在Ubuntu 16.04.03 Xenial上)上有效。

–mpb
17年12月17日在22:15

@mpb:但是,它在Arch Linux的235版本上工作得很好。

–user364819
17年12月17日在23:07

#3 楼

列出systemdstate=active中的所有sub=running服务

systemctl list-units --type=service --state=running


列出systemd中所有在运行或退出的state=active服务

systemctl list-units --type=service --state=active


#4 楼

要查看包括已在upstart / init中运行的“已启用”服务:

systemctl list-unit-files --type service --state enabled,generated


要查看所有当前正在运行的服务,请运行:

systemctl list-units --type service --state running


评论


不幸的是,两个列表中的服务名称可能不同-例如sshd与ssh以及syslog与rsyslog。

–橙色狗
19年1月11日在18:35

唯一的“ non grep”正确答案。虽然不确定为什么会提到暴发户...

–rogerdpack
19年7月5日在16:53

#5 楼

还概述了所有活动和失败的服务:

systemctl list-units --type service --state running,failed


#6 楼

有一个名为Stacer的优秀GUI应用程序,您可以在其中管理所有服务。



检查其Github链接Stacer Github
还请检查Web以获得更多信息

#7 楼

除了当前答案之外,我还使用以下方法仅获取服务的名称:
systemctl list-units --type=service --state=active,running | awk '/.*\.service/ {print }'

除了表格格式之外,这使得将这些服务通过管道传输到另一个程序变得更容易