Nginx热部署 平滑升级 日志切割

1.重载

修改nginx配置文件之后,在不影响服务的前提下想加载最新的配置,就可以重载配置即可。

操作如下:

  1)修改nginx配置文件

  2)nginx -t     检查nginx文件语法是否有误

  3)nginx -s reload    重载nginx配置

2.热部署(升级nginx版本)

比如我把版本冲nginx1.14-2升级到nginx1.16.1;

我之前nginx安装目录为:/data/geek/nginx目录

操作如下:

  注意:千万不要make insatll 否则会把二进制执行文件复制到/data/geek/下的nginx目录 覆盖之前的文件

  1)下载最新的nginx1.16.1版本

  2)执行./configure --prefix=/home/geek/nginx     #新版本的nginx执行这步--prefix目录可以随便指,最后千万不能make install。否则nginx二进制文件会找新的nginx生成的文件。

    

  3)  编译make,make之后会在objs下面生成一个nginx二进制执行文件

    

  4)备份老的nginx二进制配置文件

[root@nginx sbin]# cd /data/geek/nginx/sbin

[root@nginx sbin]# cp nginx nginx.old

 

  5)拷贝objs目录下新的nginx二进制执行文件到/home/geek/nginx/sbin/目录

[root@nginx objs]# pwd
/data/geek/nginx-1.16.1/objs
[root@nginx objs]# ls
autoconf.err  nginx    ngx_auto_config.h   ngx_modules.c  src
Makefile      nginx.8  ngx_auto_headers.h  ngx_modules.o
[root@nginx objs]# cp nginx /data/geek/nginx/sbin/ -f
cp: overwrite ‘/data/geek/nginx/sbin/nginx’? y
[root@nginx objs]# 

  6)检查当前Nginx版本是否为新版本

[root@nginx sbin]# pwd
/data/geek/nginx/sbin
[root@nginx sbin]# ls
nginx  nginx.old
[root@nginx sbin]# ./nginx -V
nginx version: nginx/1.16.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 
configure arguments: --prefix=/data/geek/nginx
[root@nginx sbin]# 

  注意:虽然当前版本已经变成了1.16.1版本,这个时候表面上看起来是更新成了新版本,但还是旧版本的在工作,接收客户端请求的仍然是1.14.2版本的nginx,这就有了下面的平滑升级

 3.平滑升级

  继续上面的操作来:

  1)kill -USR2 旧版本的主进程号 (让旧版本的worker进程不再接受请求)

    这步操作完之后,新版本的nginx进程就起来了,ps -ef |grep nginx 就可以看到二个nginx的master进程,旧的nginx master进程已经不在监听80端口了。新的请求由新的nginx进程处理

  2)kill -WINCH 旧版本的主进程号 (关闭旧版本的worker进程)

  3)这个时候就已经平滑升级完毕了

命令 作用
kill -USER2 进程号 不再让worker进程接受请求,当前请求处理完就让worker进程退出
kill -WINCH 进程号 处理完关闭
kill -HUP 进程号 启动进程

  

 4.日志切割

  1)备份之前的日志 

[root@nginx logs]# ll
total 12
-rw-r--r-- 1 root root 1721 Nov 28 20:31 access.log
-rw-r--r-- 1 root root 1686 Nov 28 20:31 error.log
-rw-r--r-- 1 root root    6 Nov 28 20:32 nginx.pid

[root@nginx logs]# ls
access.log  error.log  nginx.pid
[root@nginx logs]# mv access.log access.log.bak

 这里直接用mv命令备份日志文件就可以,因为linux文件系统中,改名并不会影响已经打开文件的写入操作,内核inode不变,这样就不会出现丢日志了。

  2)nginx -s reopen 重新生成log文件

[root@nginx logs]# ../sbin/nginx -s reopen
[root@nginx logs]# ll
total 12
-rw-r--r-- 1 nobody root    0 Nov 28 20:36 access.log
-rw-r--r-- 1 root   root 2109 Nov 28 20:35 access.log.bak
-rw-r--r-- 1 nobody root 1747 Nov 28 20:36 error.log
-rw-r--r-- 1 root   root    6 Nov 28 20:32 nginx.pid

  

4.1一般写一个脚本然后加个定时任务进行切割,如果我下面的脚本放在crontab里一天执行一次

 kill -USR1 nginx进程号    也是重新生成日志文件,和nginx -s reopen是一样的。

猜你喜欢

转载自www.cnblogs.com/Tao9/p/11953946.html
今日推荐