前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx 启动、停止、平滑重启和平滑升级

Nginx 启动、停止、平滑重启和平滑升级

作者头像
老七Linux
发布2018-05-31 11:40:43
5.8K0
发布2018-05-31 11:40:43
举报
步骤1:查询nginx主进程号
代码语言:javascript
复制
# ps -ef | grep nginx

在进程列表里面找master进程,它的编号就是主进程号了。

步骤2:发送信号
从容停止Nginx:
代码语言:javascript
复制
# kill-QUIT主进程号 快速停止Nginx:
# kill-TERM主进程号 强制停止Nginx:
代码语言:javascript
复制
# pkill-9   主进程号

另外,若在nginx.conf配置了pid文件存放路径则该文件存放的就是Nginx主进程号,如果没指定则放在nginx的logs目录下。有了pid文件,我们就不用先查询Nginx的主进程号,而直接向Nginx发送信号了,命令如下:

代码语言:javascript
复制
# kill-信号类型'/usr/local/nginx/logs/nginx.pid'
平滑重启

如果更改了配置就要重启Nginx,要先关闭Nginx再打开?不是的,可以向Nginx发送信号,平滑重启。

平滑重启命令:
代码语言:javascript
复制
# kill -HUP 住进称号或进程号文件路径

代码语言:javascript
复制
# /usr/local/nginx/sbin/nginx -s reload

注意,修改了配置文件后最好先检查一下修改过的配置文件是否正确,以免重启后Nginx出现错误影响服务器稳定运行。判断Nginx配置是否正确命令如下:

代码语言:javascript
复制
# /usr/local/nginx/sbin/nginx -t

当nginx接收到HUP信号时,它会尝试先解析配置文件(如果指定文件,就使用指定的,否则使用默认的),如果成功,就应用新的配置文件(例如:重新打开日志文件或监听的套接字),之后,nginx运行新的工作进程并从容关闭旧的工作进程,通知工作进程关闭监听套接字,但是继续为当前连接的客户提供服务,所有客户端的服务完成后,旧的工作进程就关闭,如果新的配置文件应用失败,nginx再继续使用早的配置进行工作。

补充内容:nginx的几种信号
代码语言:javascript
复制
TERM,INT 快速关闭

QUIT 从容关闭

HUP 平滑重启,重新加载配置文件

USR1 重新打开日志文件,在切割日志时用途较大

USR2 平滑升级可执行程序

WINCH 从容关闭工作进程
平滑升级

Nginx方便地帮助我们实现了平滑升级。其原理简单概括,就是:

代码语言:javascript
复制
(1)在不停掉老进程的情况下,启动新进程。

(2)老进程负责处理仍然没有处理完的请求,但不再接受处理请求。

(3)新进程接受新请求。

(4)老进程处理完所有请求,关闭所有连接后,停止。

这样就很方便地实现了平滑升级。一般有两种情况下需要升级Nginx,一种是确实要升级Nginx的版本,另一种是要为Nginx添加新的模块。
平滑升级命令:
代码语言:javascript
复制
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文件

代码语言:javascript
复制
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx-2017110

将新生成nginx执行文件复制到nginx/sbin下

代码语言:javascript
复制
cp objs/nginx /usr/local/nginx/sbin/nginx

检测配置文件是否正确

代码语言:javascript
复制
/usr/local/nginx/sbin/nginx -t

执行升级

代码语言:javascript
复制
make upgrade

执行完后

代码语言:javascript
复制
/usr/local/nginx/sbin/nginx -V

到此就完成平滑升级。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017/08/18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 步骤1:查询nginx主进程号
  • 步骤2:发送信号
  • 从容停止Nginx:
  • 平滑重启
    • 平滑重启命令:
      • 补充内容:nginx的几种信号
      • 平滑升级
      • 平滑升级命令:
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档