Ansible执行shell模块时stdout出现嵌套冗余数据排查求助
Ansible任务stdout嵌套异常排查方案
先验证目标主机命令本身有效性
直接在异常主机eval-jenkins2上手动执行对应命令:cd {{jenkins2_service_directory}} && cat userContent/lb.html | head -n1确认输出是否符合预期。同时检查文件权限:
ls -l {{jenkins2_service_directory}}/userContent/lb.html确保Ansible执行用户拥有该文件的读取权限。
排查变量与任务上下文冲突
- 输出
jenkins2_service_directory变量的实际值,确认路径正确性:- debug: var: jenkins2_service_directory - 检查是否存在同名变量覆盖:将当前任务的
register名称改为lb_html_head这类唯一名称,避免和之前任务的注册变量冲突。
- 输出
对比执行环境差异
- 查看两台主机的
bash版本:bash --version,确认管道处理逻辑是否一致 - 检查
head命令路径:which head,确保未被替换为自定义脚本或别名 - 对比执行用户的环境变量:
echo $PATH,排查是否存在异常路径优先级导致调用非预期命令
- 查看两台主机的
启用Verbose日志抓细节
执行playbook时添加-vvv参数获取详细执行日志:ansible-playbook your_playbook.yml -l eval-jenkins2 -vvv重点关注shell任务的实际执行命令、原始返回输出,排查是否存在转义或嵌套异常。
简化任务排除干扰
用更简单的形式测试任务,比如拆分管道或改用command模块:- name: get lb.html first line command: head -n1 userContent/lb.html args: chdir: "{{jenkins2_service_directory}}" register: lb_html_head验证是否为管道逻辑导致的输出异常。
内容的提问来源于stack exchange,提问作者piecia
相关产品推荐
相关产品推荐

