列出已启用的服务实例

列出已启用的服务实例

我想列出所有启用的服务实例。

下面列出了已启用的服务,但仅显示服务,而不显示单个实例:

systemctl list-unit-files --state=enabled

下面列出了所有正在运行的实例:

systemctl list-units --state=running

我希望类似下面的内容显示已启用的实例:

systemctl list-units --state=enabled

但这并不管用。

因此,如果我使用以下命令启动两个服务实例:

systemctl start foo-service@primary
systemctl start foo-service@secondary

...但我只启用一个:

systemctl enable foo-service@secondary

我能找出已启用实例的唯一方法是:

ls /etc/systemd/system/multi-user.target.wants/

但这似乎很不方便。有没有系统化的方法可以做到这一点?如果重要的话,版本是 232。

答案1

我发现的一个解决方案是列出所有单元(其中将包括模板服务的所有实例),并使用xargs为每个单元运行命令(检查每个单元是否已启用):

$ systemctl list-units --no-legend | awk '{print $1}' | xargs -I % sh -c 'echo "%: $(systemctl is-enabled %)"'
auditd.service: enabled
chronyd.service: enabled
crond.service: enabled
...

解释一下这里发生的事情:

  • systemctl list-units --no-legend:列出所有 systemd 单元,但不显示输出顶部的标题

  • awk '{print $1}':打印每行的第一部分,即单位名称

  • xargs -I % sh -c 'echo "%: $(systemctl is-enabled %)"':对管道输入的行运行命令。这将回显单元名称,然后是 的输出systemctl is-enabled <service>

答案2

您可以使用“grep”来搜索并列出已启用的服务

systemctl list-unit-files | grep enabled

相关内容