这里有人能够启动/停止/重新加载/... 在 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 --failed
grep 查找与“openstack-nova-*.service”匹配的服务,然后通过cut
在空格 ( -d ' '
) 上剪切 ( ) 并取第一个结果 ( -f 1
) 来删除这些文件的描述符。然后它会重新启动整个程序,因为幸好 systemctl 命令允许将多个服务传递给它以停止。
答案2
因此,对于那些希望同时管理多个 systemd 单元的人来说,这一点值得注意。自 2016 年(2017 年?)起,Systemd 开始接受通配符 \o/
例如:
systemctl restart openstack-nova-*
现已全面投入使用
PS:至少它可以在 CentOS 7.x 版本上运行(这是我测试的唯一一个)。