我使用nginx作为反向代理。 每当我更新它的configuration使用
sudo "cp -r #{nginx_config_path}* /etc/nginx/sites-enabled/" sudo "kill -s HUP `cat /var/run/nginx.pid`"
我面临一个短暂的停机时间。 我怎样才能避免呢?
运行service nginx reload
或/etc/init.d/nginx reload
它会在没有停机的情况下进行configuration的热重新加载。 如果你有待处理的请求,那么将会有nginx进程在处理之前处理这些连接,所以这是一种非常优雅的方式来重新加载configuration。
有时你可能想用sudo
来预先设定
运行/usr/sbin/nginx -s reload
不,你是不正确的,你不应该面对你所描述的程序的任何停机时间。 (Nginx不仅可以在不停机的情况下进行configuration重新加载,而且可以即时升级可执行文件,而无需停机。)
根据http://nginx.org/docs/control.html#reconfiguration ,将HUP
信号发送给nginx确保它执行平稳重启,并且如果configuration文件不正确,则整个过程将被废弃,而您在发送HUP
信号之前,与nginx一起离开。 任何时候都不应该停工。
为了让nginx重新读取configuration文件,HUP信号应该被发送到主进程。 主进程首先检查语法的有效性,然后尝试应用新的configuration,即打开日志文件和新的侦听套接字。 如果失败,它将回滚更改并继续使用旧configuration。
通常情况下,重新加载服务的configuration文件不应该影响正在运行的服务。 但是,这取决于如何处理SIGHUP
信号。
如果特定服务在重新加载期间遇到停机时间,则可以通过在多个服务器上运行相同的服务(最好使用负载平衡器)来避免这种情况。 在这种情况下,您可以一次取出一个服务器并重新加载/重新启动。 然后,确认后可以重新添加。