如何在Ubuntu上成功完成配置测试后重新启动nginx?

jan*_*jan 102 ubuntu command-line nginx

当我在Ubuntu服务器上的命令行上重新启动nginx服务时,当nginx配置文件出错时,服务崩溃.在多站点服务器上,这会放下所有站点,甚至是没有配置错误的站点.

为了防止这种情况,我首先运行nginx配置测试:

nginx -t
Run Code Online (Sandbox Code Playgroud)

测试成功后,我可以重启服务:

/etc/init.d/nginx restart
Run Code Online (Sandbox Code Playgroud)

或者只重新加载nignx站点配置而不重启:

nginx -s reload
Run Code Online (Sandbox Code Playgroud)

有没有办法将重启命令有条件的那两个命令组合到配置测试的结果中?

我在网上找不到这个,关于此的官方文档是相当基本的.我不太了解Linux,所以我不知道我正在寻找的是在我面前还是根本不可能.

我正在使用nginx v1.1.19.

Dan*_*scu 70

从nginx 1.8.0开始,正确的解决方案是

sudo nginx -t && sudo service nginx reload
Run Code Online (Sandbox Code Playgroud)

请注意,由于错误,即使配置文件有错误,也configtest始终返回零退出代码.

  • @MechanisM:没有sudo的`nginx -t`几乎肯定会因为权限错误而失败. (4认同)
  • nginx -t && sudo nginx -s reload (3认同)

Moh*_*ady 45

实际上,据我所知,nginx会显示一条空消息,如果配置错误,它实际上不会重启.

搞砸它的唯一方法是做一个nginx停止然后重新开始.它会成功停止,但无法启动.

  • 好吧,我刚刚测试过它,我的笔记本电脑有nginx 1.2,它按照我的说法工作,我的VPS和你的一样有1.1.19,它和你在问题中描述的一样.所以我想这是在1.2中处理的 (5认同)
  • `service nginx reload` 不会显示配置是否正确加载,因此如果您怀疑配置可能不正确,它是没有用的。如果配置有错误,`service nginx restart`将停止服务器! (2认同)

Mau*_*hez 38

仅当配置测试成功时,我才使用以下命令重新加载Nginx(版本1.5.9):

/etc/init.d/nginx configtest && sudo /etc/init.d/nginx reload
Run Code Online (Sandbox Code Playgroud)

如果您经常需要这样做,您可能想要使用别名.我使用以下内容:

alias n='/etc/init.d/nginx configtest && sudo /etc/init.d/nginx reload'
Run Code Online (Sandbox Code Playgroud)

这里的技巧是由"&&"完成的,如果第一个命令成功,它只执行第二个命令.您可以在此处看到有关"&&"运算符使用的更详细说明.

如果您真的想重新启动服务器,可以使用"restart"而不是"reload".

  • 这对我不起作用.即使测试失败,这两个命令也会执行. (2认同)
  • [configtest始终返回零退出代码](http://trac.nginx.org/nginx/ticket/763),至少在nginx 1.8.0中。使用`nginx -t`代替。 (2认同)

Mec*_*isM 8

alias nginx.start='sudo nginx -c /etc/nginx/nginx.conf'
alias nginx.stop='sudo nginx -s stop'
alias nginx.reload='sudo nginx -s reload'
alias nginx.config='sudo nginx -t'
alias nginx.restart='nginx.config && nginx.stop && nginx.start'
alias nginx.errors='tail -250f /var/logs/nginx.error.log'
alias nginx.access='tail -250f /var/logs/nginx.access.log'
alias nginx.logs.default.access='tail -250f /var/logs/nginx.default.access.log'
alias nginx.logs.default-ssl.access='tail -250f /var/logs/nginx.default.ssl.log'
Run Code Online (Sandbox Code Playgroud)

然后使用命令"nginx.reload"等.


gok*_*amy 6

您可以使用/etc/init.d/nginx reload和重新加载sudo service nginx reload

如果nginx -t抛出一些错误,那么它不会重新加载

所以使用 && 同时运行两者

喜欢

nginx -t && /etc/init.d/nginx 重新加载