如何测试 nginx 配置文件在 Bash 脚本中是否有效?

如何测试 nginx 配置文件在 Bash 脚本中是否有效?
  • 乌班图16.04
  • bash 版本 4.4.0
  • nginx版本:nginx/1.14.0

如何在 Bash 脚本中测试 Nginx 配置文件?目前我在 shell 中使用 -t :

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

但我想在脚本中做到这一点?

答案1

使用退出状态。来自 nginx 联机帮助页:

如果成功则退出状态为 0,如果命令失败则退出状态为 1。

和来自http://www.tldp.org/LDP/abs/html/exit-status.html:

$?读取最后执行的命令的退出状态。

一个例子:

[root@d ~]# /usr/local/nginx/sbin/nginx -t;echo $?
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is     successful
0
[root@d ~]# echo whatever > /usr/local/nginx/nonsense.conf
[root@d ~]# /usr/local/nginx/sbin/nginx -t -c nonsense.conf;echo $?
nginx: [emerg] unexpected end of file, expecting ";" or "}" in /usr/local/nginx/nonsense.conf:2
nginx: configuration file /usr/local/nginx/nonsense.conf test failed
1

一个脚本化的例子:

#!/bin/bash
/usr/local/nginx/sbin/nginx -t 2>/dev/null > /dev/null
if [[ $? == 0 ]]; then
 echo "success"
 # do things on success
else
 echo "fail"
 # do whatever on fail
fi

答案2

@DeeEff 以上 bash 脚本是否适用于 nginx 容器到云虚拟机或云虚拟机到 nginx 容器

示例 sudo 容器名称 -t

bash 程序/脚本,可以检查 Nginx 服务。如果返回“Hello World”页面,脚本或程序应打印“OK”并以代码 0 退出。如果未返回“Hello World”页面,则应以非零代码和简短诊断退出。

相关内容