命令
nginx平滑升级
将新版本的nginx编译成新的二进制文件之后(上一篇文章有说),将新的nginx二进制文件替换掉原来旧的nginx二进制文件,其他文件不替换。替换之前最好先将旧的nginx二进制文件备份一下:
// 进入nginx安装目录后输入:
cp nginx nginx.old
用新的编译后的nginx二进制文件替换掉旧的:
// 进入新编译的nginx的objs文件夹后输入:
cp -r nginx /usr/local/nginx/sbin/ -f
然后输入 yes
然后开始进行平滑升级
kill -USR2 nginx-master-pid
// nginx-master-pid的获取方式为 ps -ef | grep nginx,之后看master那行,第二个数字为对应的pid,然后将上面的nginx-master-pid替换为那个数字
输入完以上命令后,会新起一个nginx master进程,这个master进程使用的是新复制过来的nginx二进制文件。当然,在这一步老的nginx master/worker进程还会继续运行,但此时老的nginx master/worker进程已经不再监听 80/443
这样的端口了,新的请求只会进入到新起的master进程中。
这个时候,我们就可以给老的nginx进程发送一个信号,让它优雅地关闭老的worker 进程:
kill -WINCH nginx-master-pid
输入上面的命令后,老的worker进程就退出了,剩下新的master/worker进程以及老的master进程,老的master进程不会退出,这样方便我们做版本回退(复制老的回来,重新走一遍上面的流程)
nginx日志分割
拷贝一份旧的access.log到别的文件夹(或者改个名字),然后执行:
nginx -s reopen
这样其实不好用,有一种做法是写一个bash脚本,里面的逻辑是将日志复制到一个文件夹中,然后再执行reopen。然后再crontab中设置一个定时任务,每天的什么时候执行一次这个脚本,这样就可实现nginx日志的按天分割