# ps -ef | grep nginx
在进程列表里面找master进程,它的编号就是主进程号了。
# kill-QUIT主进程号 快速停止Nginx:
# kill-TERM主进程号 强制停止Nginx:
# pkill-9 主进程号
另外,若在nginx.conf配置了pid文件存放路径则该文件存放的就是Nginx主进程号,如果没指定则放在nginx的logs目录下。有了pid文件,我们就不用先查询Nginx的主进程号,而直接向Nginx发送信号了,命令如下:
# kill-信号类型'/usr/local/nginx/logs/nginx.pid'
如果更改了配置就要重启Nginx,要先关闭Nginx再打开?不是的,可以向Nginx发送信号,平滑重启。
# kill -HUP 住进称号或进程号文件路径
或
# /usr/local/nginx/sbin/nginx -s reload
注意,修改了配置文件后最好先检查一下修改过的配置文件是否正确,以免重启后Nginx出现错误影响服务器稳定运行。判断Nginx配置是否正确命令如下:
# /usr/local/nginx/sbin/nginx -t
当nginx接收到HUP信号时,它会尝试先解析配置文件(如果指定文件,就使用指定的,否则使用默认的),如果成功,就应用新的配置文件(例如:重新打开日志文件或监听的套接字),之后,nginx运行新的工作进程并从容关闭旧的工作进程,通知工作进程关闭监听套接字,但是继续为当前连接的客户提供服务,所有客户端的服务完成后,旧的工作进程就关闭,如果新的配置文件应用失败,nginx再继续使用早的配置进行工作。
TERM,INT 快速关闭
QUIT 从容关闭
HUP 平滑重启,重新加载配置文件
USR1 重新打开日志文件,在切割日志时用途较大
USR2 平滑升级可执行程序
WINCH 从容关闭工作进程
Nginx方便地帮助我们实现了平滑升级。其原理简单概括,就是:
(1)在不停掉老进程的情况下,启动新进程。
(2)老进程负责处理仍然没有处理完的请求,但不再接受处理请求。
(3)新进程接受新请求。
(4)老进程处理完所有请求,关闭所有连接后,停止。
这样就很方便地实现了平滑升级。一般有两种情况下需要升级Nginx,一种是确实要升级Nginx的版本,另一种是要为Nginx添加新的模块。
cd /mnt
下载nginx升级包
wget http://nginx.org/download/nginx-1.10.2.tar.gz
解压升级包
tar zxvf nginx-1.10.2.tar.gz
cd nginx-1.10.2/
查看当前版本得到编译参数
/usr/local/nginx/sbin/nginx -V
用上面编译参数
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_v2_module --with-http_ssl_module --with-ipv6 --with-http_gzip_static_module --with-http_realip_module --with-http_flv_module --with-openssl=../openssl-1.0.2j --with-pcre=../pcre-8.39 --with-pcre-jit --with-ld-opt='-ljemalloc'
然后make,千万别make install
make完了 在objs目录下就多了个nginx,这个就是新版本的程序了
备份原nginx文件
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx-2017110
将新生成nginx执行文件复制到nginx/sbin下
cp objs/nginx /usr/local/nginx/sbin/nginx
检测配置文件是否正确
/usr/local/nginx/sbin/nginx -t
执行升级
make upgrade
执行完后
/usr/local/nginx/sbin/nginx -V
到此就完成平滑升级。