运行时在控制台上打印命令stdout



有时在运行ansible命令时需要等待很长时间。例如,这样的命令可以为我的模块执行30分钟:

- name: make project
shell: make -j4 install
args:
chdir: "{{ project_dir }}/build"

我希望在运行时看到这个命令的stdout,而不是在命令完成时(我在命令完成后看到输出,但我需要响应能力,所以我对-v、-vvv或-vvvv之类的东西不感兴趣(。是否可以强制ansible在运行命令时打印输出(不缓冲,最后不打印(?

您不能在命令运行时打印输出,但可以在命令完成后打印:

- name: make project
shell: make -j4 install
args:
chdir: "{{ project_dir }}/build"
register: out
ignore_errors: yes
- name: print output
debug:
msg: "{{ out.stdout }}"
- name: fail when make failed
fail:
msg: "make task failed"
when: out.rc != 0

ignore_errors: yes和失败任务都在那里,所以如果制作任务失败,输出将在播放失败之前打印出来。

您还应该考虑使用make模块,而不是在shell中运行make

我发现的给定问题的唯一解决方案是将命令的输出重定向到某个临时文件。因此:

- name: make project
shell: make -j4 install 2>&1 >/tmp/compile_logs.txt
args:
chdir: "{{ project_dir }}/build"

然后我可以打开另一个窗口:

tail -f /tmp/compile_logs.txt

最新更新