如何在ubuntu上configurationtesting成功后才能重新启动nginx?
当我在ubuntu服务器的命令行中重新启动nginx服务时,当nginxconfiguration文件有错误时,服务崩溃。 在多站点服务器上,这将放下所有站点,甚至没有configuration错误的站点。
为了防止这种情况,我首先运行nginxconfigurationtesting:
nginx -t
testing运行成功后,我可以重新启动服务
/etc/init.d/nginx restart
或者只重新加载nignx站点configuration而不重新启动
nginx -s reload
有没有一种方法可以将重启命令有条件的这两个命令组合到configurationtesting的结果中?
我无法在网上find这个官方文档 ,这是相当基本的。 我不知道我的Linux的方式,所以我不知道我在找什么是正确的在我面前或根本不可能。
我正在使用nginx v1.1.19
任何帮助,这是表示赞赏。
实际上据我所知,nginx会显示一个空的消息,如果configuration不好,实际上不会重新启动,唯一的办法是搞一个nginx stop然后重新启动,它会成功停止但失败开始。
只有configurationtesting成功时,才使用以下命令重新加载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'
这里的技巧是通过“&&”来完成的,如果第一个成功的话只执行第二个命令。 你可以在这里看到关于“&&”操作符使用的更详细的解释。
如果你真的想重启服务器,你可以使用“restart”而不是“reload”。
从nginx 1.8.0开始,正确的解决scheme是
sudo nginx -t && sudo service nginx reload
请注意,由于bug,即使configuration文件有错误, configtest
总是返回一个零退出代码 。
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”等。
你可以使用信号来控制nginx。
根据文档,你需要发送HUP信号给nginx主进程。
HUP – 更改configuration,跟上更改的时区(仅适用于FreeBSD和Linux),使用新configuration启动新工作进程,正常closures旧工作进程
检查文档在这里: http : //nginx.org/en/docs/control.html
您可以将HUP信号发送到nginx主进程PID,如下所示:
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的位置。
至less在Debian上,nginx启动脚本有一个重载function,它可以:
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 $? ;;
似乎所有你需要做的是调用service nginx reload
而不是restart
因为它调用test_nginx_config
。