我有一个剧本,应该在 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
我通过以下方式修复了该问题:
- 将脚本输出发送到日志文件
- 用一个后续任务:玩油门:1到
cat <log_file>
可能还有其他方法可以做到这一点,但这个有效。