如何禁用Nginx执行nginx -T命令时的测试消息打印?
如何禁用Nginx执行nginx -T命令时的测试消息打印?
嘿,这个问题其实很好解决,核心是搞清楚Nginx输出这些提示消息的渠道:那些警告(比如冲突的服务器名)、配置测试成功的提示,都是通过**标准错误流(stderr)输出的,而nginx -T真正要输出的配置文件内容是通过标准输出流(stdout)**传递的。
所以我们只需要把stderr的内容丢弃掉,就能只保留配置内容了,具体命令如下:
nginx -T 2>/dev/null
解释一下:
2>是Shell里的重定向符号,代表把标准错误流(文件描述符2)的内容导向后面的位置/dev/null是系统里的“黑洞”设备,任何写入它的内容都会被直接丢弃
执行这个命令后,你就只会看到Nginx的完整配置内容,那些烦人的nginx: [warn]、syntax is ok、test is successful这类消息都会消失。
如果你担心错过真正的配置语法错误(比如写错指令导致的致命错误),其实不用慌:如果配置真的有语法问题,nginx -T会返回非零的退出码,你可以通过echo $?查看命令执行状态(0代表成功,非0代表失败)。要是想保留致命错误提示但去掉警告和成功消息,也可以用更精细的过滤命令,比如:
nginx -T 2>&1 | grep -vE 'nginx: \[(warn|info)\]|nginx: the configuration file.*syntax is ok|nginx: configuration file.*test is successful'
这个命令的逻辑是把stderr和stdout合并后,用grep过滤掉不需要的行,但要注意:如果你的配置文件里刚好有和这些匹配的内容,也会被过滤掉,所以这种方法只适合你确认配置里没有类似字符串的场景。
备注:内容来源于stack exchange,提问作者palmasd1
相关产品推荐
相关产品推荐

