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)