在多台服务器上执行时,Ansible 剧本的“异步”输出顺序混乱

在多台服务器上执行时,Ansible 剧本的“异步”输出顺序混乱

我有一个剧本,应该在 5-10 台服务器上并行运行脚本

- name: Run script & cleanup
  ansible.builtin.shell: |
    ...
    bash {{ SCRIPT }}
    ...
  args:
    executable: /bin/bash
  async: 1800
  poll: 60

我必须添加这个异步 + 轮询,因为脚本需要大约 10 分钟才能完成。如果我不指定它们,Ansible 会抱怨它与服务器的连接丢失了。

该脚本在所有服务器上并行执行,因此它在所有服务器上大致同时完成。该脚本输出 500-1000 行输出。问题是 ansible 输出的 STDOUT 到处都是。Ansible 输出:

  • 来自服务器 2 的一些输出
  • 然后是服务器 5 的一些输出
  • 然后是服务器 3 的一些输出
  • 然后再次从服务器 2 输出一些输出
  • ...

如果某个服务器出现问题,读取日志和调试就会变得很混乱。

如何让 ansible 输出每个服务器的脚本的完整输出?

当我不使用“异步”时,不会发生此问题,但正如我上面所说,Ansible 由于某种原因与服务器失去连接,并且我读到对于长时间运行的任务使用“异步”是最佳做法。

答案1

我通过以下方式修复了该问题:

  • 将脚本输出发送到日志文件
  • 用一个后续任务:油门:1cat <log_file>

可能还有其他方法可以做到这一点,但这个有效。

相关内容