• 使用新的可执行程序替换旧的可执行程序,对于编译安装的Nginx,可以将新版本编译安装到旧版本的nginx安装路径中.替换之前,最好备份一下旧的可执行程序
• 发送以下指令:
Kill USR2 <旧版本的nginx主进程号>
• 旧版本的主进程将重命名它的pid文件为.oldbin (例如:/usr/local/nginx/logs/nginx.pid.oldbin),然后执行新版本的nginx可执行程序,依次启动新的主进程和新的工作进程.
• 此时,新旧版本的nginx实例会同时运行,共同处理输入的请求.要逐步停止旧版本的nginx实例,你必须发送WINCH信号给旧的主进程,然后,它的工作进程就将开始从容关闭:
kill WINCH <旧版本的Nginx主进程号>
• 一段时间后,旧的工作进程(worker process)处理了所有已连接的请求后退出,仅由新的工作进程来处理输入的请求了.
• 这时候,我们可以决定是使用新版本,还是回复到旧的版本;
Kill HUP <旧的主进程号>:Nginx将在不重载配置文件的情况下启动它的工作进程;
Kill QUIT <新的主进程号>:正常关闭其它工作进程(woker process);
如果此时报错, 提示还有进程没有结束就用下面命令先关闭旧工作进程,再关闭主进程号:
Kill TERM <新的工作进程号>:强制退出工作进程;
Kill <新的主进程号或旧的主进程号>:如果因为某些原因新的工作进程不能退出,则向其发送kill信号.
新的主进程退出后,旧的主进程会移除.oldbin前缀,恢复为他的.pid文件,这样,一切就都恢复到升级之前了,如果尝试升级成功,而你也希望保留新的服务器时,可发送QUIT信号给旧的主进程,使其退出而只留下新的服务器运行
6.日志切割
mv /data1/logs/access.log /data1/logs/20160520.log
kill -USR1 'cat /var/run/nginx/nginx.pid' #这样的话就不用ps查找Nginx主进程号了.
如果要让它每天定时切割日志,可以编写shell脚本.并且利用crontab来每天定时运行.
#!/bin/bash
#定义Nginx日志文件的存放路径
logs_path = "/var/logs/nginx/"
mkdir -p ${logs_path}$(date -d "yesterday" + "%Y")/$(date -d "yesterday" +"%m")/
mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday"+"%m")/access_$(date -d "yesterday" + "%Y%m%d").log
kill -USR1 'cat /var/run/nginx/nginx.pid'
再配置crontab,输入crontab -e
输入:
00 00 * * * /bin/bash /usr/loca/webserver/nginx/sbin/cut_nginx_log.sh
更多Nginx相关教程见以下内容:
CentOS 6.2实战部署Nginx+MySQL+PHP
搭建基于Linux6.3+Nginx1.2+PHP5+MySQL5.5的Web服务器全过程
CentOS 6.3下配置Nginx加载ngx_pagespeed模块