网站最近在做年中大促,其中图片业务使用的是nginx集群,为了满足大促时负载规模需要扩容,我们现在使用的自动化运维工具是基于saltstack的,自动化部署后有个小需求,想把nginx编译安装时的参数重定向备份到一个文件里,查看编译参数使用-V,这里说下大V和小v的区别,

-v : show version and exit 查看版本后退出

-V : show version and configure options then exit 查看版本和配置参数后退出

于是,/usr/local/nginx/sbin/nginx -V > nginx_configure.txt

wKiom1P0e0myMTVAAADT3rSsWOw812.jpg

问题来了,无法把信息定向到文件里而是直接定向到终端显示

wKiom1P0fZHjKJJlAAAh_z_SzGE125.jpg

为什么会这样呢?还是看看nginx源码吧。

wKioL1P0f-yRGiYwAACZ7SlIKHY582.jpg

在src/core/nginx.c中找到一个函数ngx_write_stderr函数,然后继续往下找到与这个函数相关的代码

wKioL1P0gFTzJY-3AADn-fgkbgI078.jpg

ngx_write_stderr是nginx自定义的inline函数,当使用-V参数查看版本的时候会调用这个函数。既然是stderr肯定是说把-V的输出当做错误输出打印到终端显示了,那么就很清楚了linux下stdout标准正确输出也是默认输出是1,标准错误输出是2,于是/usr/local/nginx/sbin/nginx -V 2> nginx_configure.txt

wKiom1P0gGCCV37qAADghEkX9Uk039.jpg有内容了,问题很简单,主要是遇到问题解决问题的思路很重要。这种备份参数的对于中小企业网站运维时还是必要的,避免在网站迁移后了解过去的编译安装情况。