searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

ansible-playbook无法期望获取到nginx -t/-V命令结果排查

2023-05-26 02:35:52
58
0

结论

nginx命令默认将命令输出写到了标准错误中。通过ansible执行nginx命令及获取其执行结果可通过获取stderr内容或将命令标准错误输出到标准输出中或stdout的内容,即:nginx -t 2>&1 && nginx -V 2>&1。

现象说明

通过playbook进行nginx批量升级,准备将升级后的nginx版本同时打印出来,可总是输出为空。

验证过程

为方便验证shell脚本和playbook中均配置nginx -t及-V命令输出,并使用ps命令进行对比实验

如下shell脚本nginx_update.sh中,使用echo打印nginx -t 和nginx -V的结果

如下playbook yaml中nginx_update.yaml中,执行nginx_update.sh脚本及执行nginx -t && nginx -V 命令,并注册输出结果获取

执行:

ansible-playbook -i `pwd`/host.ini nginx_update.yaml

脚本及playbook task结果输出:

很明显仅输出了ps执行结果,nginx_update.sh脚本及执行nginx -t && nginx -V 命令均输出为空。

Ansible TASK中也同样输出为空

同时手动在服务器上执行nginx -t && nginx -V 结果可正常输出

然后将task中配置的输出全部打印 如下:

执行后结果如下,标红的字体正是nginx -t && nginx -V 的输出结果,被输出到了stderr_lines中,stdout_lines的输出为空,还可以看到执行后rc值为0,failed=false 这表明 该命令playbook中是执行成功的。

接着 我们使用2>&1 将命令的标准错误也打印到标准输出再次验证

对 task中命令做如下修改:

输出结果中,的确将输出内容打印到了stdou中来,并且也是执行成功

 

 

0条评论
0 / 1000