不使用 for 循环重新启动 systemctl 上的所有特定单元?

不使用 for 循环重新启动 systemctl 上的所有特定单元?

这里有人能够启动/停止/重新加载/... 在 systemctl 上使用通配符或类似方法指定的单元列表吗?

我尝试做一些类似的事情:systemctl restart openstack-nova-*.services或者systemctl restart openstack-nova-?.services

但这是一条死路,我在 systemctl 手册上没有找到任何有用的东西。

我可以使用 for 循环,但在此之前我必须先创建一个systemctl -t service --failed,然后对列出的单位进行 grep……有点无聊不是吗?

因此,如果有人知道是否有可能做这样的事情,我会很高兴听到。

如果不是,我想我会在 systemctl 开发人员列表中推动这个想法,或者如果我有时间的话可能会做补丁^^

答案1

更新Systemd 从 systemd-209 开始支持通配符https://serverfault.com/a/797926/291826


两年后,systemctl 仍然不允许使用通配符,尽管它们非常有用。

不过,我确实记下了你的笔记systemctl -t service --failed,并把它拼凑起来。我决定把它发布在这里,因为它可以帮助下一个遇到这个问题的人。

systemctl restart $(systemctl -t service --failed | grep openstack-nova-*.service | cut -d ' ' -f 1)

这将使用systemctl -t service --failedgrep 查找与“openstack-nova-*.service”匹配的服务,然后通过cut在空格 ( -d ' ') 上剪切 ( ) 并取第一个结果 ( -f 1) 来删除这些文件的描述符。然后它会重新启动整个程序,因为幸好 systemctl 命令允许将多个服务传递给它以停止。

答案2

因此,对于那些希望同时管理多个 systemd 单元的人来说,这一点值得注意。自 2016 年(2017 年?)起,Systemd 开始接受通配符 \o/

例如:

systemctl restart openstack-nova-*现已全面投入使用

PS:至少它可以在 CentOS 7.x 版本上运行(这是我测试的唯一一个)。

相关内容