Systemd 停止/禁用所有与变量不匹配的模板服务

Systemd 停止/禁用所有与变量不匹配的模板服务

如何以编程方式停止/禁用所有与特定变量不匹配的模板化 systemd 服务?例如,我正在运行myservice@v1,我想停止/禁用与以下变量不匹配的服务myservice@* 除了为了myservice@v1

这是我所见过最接近的,但是list-units它给出的输出显然不适合机器解析,因此很脆弱:

export SERVICES="$(systemctl list-units myservice@* --all | \
                   grep myservice | grep -v "@v1" | cut -f1 -d' ')"
if [ -n "$SERVICES" ]; then 
  /bin/systemctl stop $SERVICES
  /bin/systemctl disable $SERVICES
fi

答案1

添加--no-legendsystemctl命令中以删除一些您不需要的无用垃圾。然后它将仅列出单位,没有页眉或页脚。

我还建议您收紧grep。就目前情况而言,它将匹配v10以及v1,仅举个例子。您可以通过添加-w单词匹配来实现这一点,或者通过更具体地匹配,例如@v1.service

相关内容