我想列出所有启用的服务实例。
下面列出了已启用的服务,但仅显示服务,而不显示单个实例:
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