我想通过 Ansible CLI 同时紧急/重新启动多个服务器,但是,下面的命令在执行时卡住了。有人可以建议如何修改命令以实现并发恐慌/重启吗?
ansible HostGroup -m shell -a 'echo b >/proc/sysrq-trigger'
答案1
由于关于上述命令有类似的问题和答案
我知道您正在寻找一项任务,该任务可以立即重新启动所有系统,而无需刷新、同步或卸载磁盘,也无需关闭所有网络连接,例如
请注意,Ansible 不是一种集群 shell 或终端多路复用器,甚至 ad-hoc 命令的行为也不是这样的。
因此,您当前的方法不会为您提供预期的结果。
这是因为 Ansible 连接的设备会比 Ansible 更快地重新启动,并且模块shell
可以保持自己的状态和连接。意思是,关闭和断开会话。类似的行为可以在示例中找到重新加载...设备挂起。
您可能正在寻找异步临时任务它以一种“即发即忘“ 方式并最终得到类似的结果
ansible HostGroup --background 5 --poll 0 --module-name shell --args 'echo b >/proc/sysrq-trigger'
文档
-
如果您想同时运行 playbook 中的多个任务,请使用
async
withpoll
设置为 0。当您设置 时poll: 0
,Ansible 会启动任务并立即转到下一个任务,而无需等待结果。
类似问答
更多参考
答案2
Ansible 的规则 #1:在回退到 shell 命令之前,查看是否已经有一个涵盖用例的模块。
在这种情况下,实际上有一个重启模块。
根据该页面上的示例,您需要一个大致如下所示的剧本:
---
hosts: HostGroup
tasks:
- name: Reboot systems
ansible.builtin.reboot:
或者,如果您从命令行执行此操作,ansible -m reboot HostGroup
应该可以解决问题。
与 Ansible 一样,在对任何生产服务器执行该命令之前,请在您可以承担得起搞砸的系统上测试该命令。