列出启用的服务实例

ric*_*mer 5 multiple-instances services systemd 17.04

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

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

systemctl list-unit-files --state=enabled
Run Code Online (Sandbox Code Playgroud)

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

systemctl list-units --state=running
Run Code Online (Sandbox Code Playgroud)

我希望像下面这样显示启用的实例:

systemctl list-units --state=enabled
Run Code Online (Sandbox Code Playgroud)

但这是行不通的。

因此,如果我启动两个服务实例:

systemctl start foo-service@primary
systemctl start foo-service@secondary
Run Code Online (Sandbox Code Playgroud)

...但是我只启用一个:

systemctl enable foo-service@secondary
Run Code Online (Sandbox Code Playgroud)

我能够找出启用了哪些实例的唯一方法是:

ls /etc/systemd/system/multi-user.target.wants/
Run Code Online (Sandbox Code Playgroud)

但这看起来很混乱。有没有系统方法可以做到这一点?如果重要的话,版本是 232。

小智 3

我发现的一种解决方案是列出所有单元(其中将包括模板化服务的所有实例),并用于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
...
Run Code Online (Sandbox Code Playgroud)

解释一下这里发生了什么:

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

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

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


小智 -1

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

systemctl list-unit-files | grep enabled
Run Code Online (Sandbox Code Playgroud)

  • 正如问题中提到的,“list-unit-files”仅显示启用的服务,而不显示启用的实例。 (4认同)