通过 Ansible 同时紧急/重启多个服务器

通过 Ansible 同时紧急/重启多个服务器

我想通过 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'

文档

  • 同时运行任务: poll = 0

    如果您想同时运行 playbook 中的多个任务,请使用asyncwithpoll设置为 0。当您设置 时poll: 0,Ansible 会启动任务并立即转到下一个任务,而无需等待结果。

类似问答

更多参考

答案2

Ansible 的规则 #1:在回退到 shell 命令之前,查看是否已经有一个涵盖用例的模块。

在这种情况下,实际上有一个重启模块。

根据该页面上的示例,您需要一个大致如下所示的剧本:

---
hosts: HostGroup
tasks:
  - name: Reboot systems
    ansible.builtin.reboot:

或者,如果您从命令行执行此操作,ansible -m reboot HostGroup应该可以解决问题。

与 Ansible 一样,在对任何生产服务器执行该命令之前,请在您可以承担得起搞砸的系统上测试该命令。

相关内容