只有在Ubuntu上的配置测试成功后,我如何重新启动nginx?
当我在Ubuntu服务器的命令行上重新启动nginx服务时,当nginx配置文件出现错误时,该服务就会崩溃。在多站点服务器上,这会关闭所有站点,甚至是没有配置错误的站点 为了防止出现这种情况,我首先运行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命令取决于配置测试的结果,那么有没有一种方法可以组合这两个命令
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,因此第二个命令将不会运行。Itsnginx-s重新加载
anyway@miknik我想这就是他想说的,只是说得不对。他说如果nginx-t抛出一些错误,那么它将不会重新加载。语句同时运行
也可以解释为单个命令或一行。我不认为他在这种情况下一定会同时说。