Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
只有在Ubuntu上的配置测试成功后,我如何重新启动nginx?_Ubuntu_Command Line_Nginx - Fatal编程技术网

只有在Ubuntu上的配置测试成功后,我如何重新启动nginx?

只有在Ubuntu上的配置测试成功后,我如何重新启动nginx?,ubuntu,command-line,nginx,Ubuntu,Command Line,Nginx,当我在Ubuntu服务器的命令行上重新启动nginx服务时,当nginx配置文件出现错误时,该服务就会崩溃。在多站点服务器上,这会关闭所有站点,甚至是没有配置错误的站点 为了防止出现这种情况,我首先运行nginx配置测试: nginx -t 测试成功运行后,我可以重新启动服务: /etc/init.d/nginx restart 或仅重新加载nignx站点配置,无需重新启动: nginx -s reload 如果restart命令取决于配置测试的结果,那么有没有一种方法可以组合这两个命令

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

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

nginx -t
测试成功运行后,我可以重新启动服务:

/etc/init.d/nginx restart
仅重新加载nignx站点配置,无需重新启动:

nginx -s reload
如果restart命令取决于配置测试的结果,那么有没有一种方法可以组合这两个命令

我在网上找不到这个,这是很基本的。我对Linux不太熟悉,所以我不知道我要找的东西是否就在眼前,或者根本不可能


我正在使用nginx v1.1.19。

事实上,据我所知,nginx会显示一条空消息,如果配置不好,它实际上不会重新启动


唯一的办法是停止nginx,然后重新启动。它将成功停止,但无法启动。

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

/etc/init.d/nginx configtest && sudo /etc/init.d/nginx reload
如果需要经常这样做,可能需要使用别名。我使用以下方法:

alias n='/etc/init.d/nginx configtest && sudo /etc/init.d/nginx reload'
这里的技巧是由“&&”完成的,如果第一个命令成功,它只执行第二个命令。您可以看到关于“&&”运算符用法的更详细说明


如果您确实想重新启动服务器,可以使用“重新启动”而不是“重新加载”。

至少在Debian上,nginx启动脚本具有重新加载功能,该功能可以:

reload)
  log_daemon_msg "Reloading $DESC configuration" "$NAME"
  test_nginx_config
  start-stop-daemon --stop --signal HUP --quiet --pidfile $PID \
   --oknodo --exec $DAEMON
  log_end_msg $?
  ;;

似乎您需要做的就是调用
服务nginx reload
而不是
restart
,因为它调用
test\u nginx\u config
,您可以使用信号来控制nginx

根据文档,您需要向nginx主进程发送HUP信号

HUP-更改配置,跟上更改的时区(仅适用于FreeBSD和Linux),使用新配置启动新的工作进程,优雅地关闭旧的工作进程

检查此处的文档:

您可以向nginx主进程PID发送HUP信号,如下所示:

kill -HUP $( cat /var/run/nginx.pid )

上面的命令从
/var/run/nginx.PID
读取nginx PID。默认情况下,nginx pid被写入
/usr/local/nginx/logs/nginx.pid
,但可以在config中重写。检查您的
nginx.config
以查看其保存PID的位置。

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

sudo nginx -t && sudo service nginx reload
请注意,由于存在错误,即使配置文件有错误

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'

然后使用命令“nginx.reload”等

您可以使用
/etc/init.d/nginx reload
sudo服务nginx reload

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

因此,请使用&&同时运行这两个命令

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


你在说什么版本的nginx?我正在使用v1.1.19,无论配置文件中有什么错误,它都会尝试重新启动。它会通知我有问题,但到那时已经太晚了好吧,我刚刚测试了它,我的笔记本电脑有nginx 1.2,它的工作原理与我描述的一样,我的VPS有1.1.19和你的一样,它的工作原理与你在问题中描述的一样。所以我猜这是在1.2Great中处理的!谢谢你帮我弄明白了。我会把这个问题再多问一点,看看没有人能回答nginx服务nginx reload不会显示配置是否正确加载,所以如果你怀疑配置可能不正确,这是没有用的<代码>服务nginx restart将在配置出错时停止服务器!一个小的shell脚本如何检查nginx-t的返回状态(使用$?),然后根据返回状态重新启动?注意nginx 1.4.2我发现
pkill-1 nginx
(实际上是我的init.d/nginx reload所做的)如果配置失败并错误地返回成功,则不会重新加载。检查你自己的版本。这不适合我。即使测试失败,这两个命令也会执行,至少在nginx 1.8.0中是这样。改用
nginx-t
service nginx reload
不会给出任何类型的指示,说明配置测试是否正常,或者是否重新加载。那么
test\u nginx\u config
在这种情况下会做什么?我想你们都有道理<代码>服务nginx reload在命令行上就足够了,但是有时您可能希望捕获stderr输出并将其返回到脚本以进行故障排除
nginx-t
会告诉您哪个文件有无效参数,以及在哪一行。nginx-t&&sudo nginx-sreload@MechanisM:
nginx-t
如果没有sudo,几乎肯定会由于权限错误而失败。我想主要展示重新加载的最后一部分。在我的例子中,我有自定义编译的nginx,甚至在/etc/init.d等等中没有任何脚本,所以在我的例子中,“服务nginx reload”不会做任何事情,我来教你一些关于bash的知识不
同时运行这两个命令
如果左侧命令返回的退出代码为0,则运行右侧命令。如果您的
nginx-t
抛出一个错误,它的退出代码将不会是0,因此第二个命令将不会运行。Its
nginx-s重新加载
anyway@miknik我想这就是他想说的,只是说得不对。他说
如果nginx-t抛出一些错误,那么它将不会重新加载
。语句
同时运行
也可以解释为单个命令或一行。我不认为他在这种情况下一定会同时说