重载
修改了配置文件后,直接重新启动nginx,使用reload命令
./nginx -s reload
其中,-s有发送信息的作用。
热部署
重新编译了nginx的可执行程序后,可以通过不杀掉程序进行升级。首先备份原来的程序:
cp nginx nginx.old
之后,把新的可执行文件替换到原来的旧文件,替换后查看原来进程的pid号:
ps -ef | grep nginx
root 14459 1 0 21:33 ? 00:00:00 nginx: master process ./nginx
nobody 14590 14459 0 21:33 ? 00:00:00 nginx: worker process
root 14637 12131 0 21:34 pts/0 00:00:00 grep --color=auto nginx
这里可以知道nginx运行的pid号为14459,执行命令:
kill -USR2 14459
再次通过ps观看可以发现,新的master进程和旧的master进程同时在运行,但是请求会逐渐过渡到新的master进程中
root 14459 1 0 21:33 ? 00:00:00 nginx: master process ./nginx
nobody 14590 14459 0 21:33 ? 00:00:00 nginx: worker process
root 17398 14459 0 21:54 ? 00:00:00 nginx: master process ./nginx
nobody 17399 17398 0 21:54 ? 00:00:00 nginx: worker process
这时候,需要向老的进程发送信号,需要它逐渐关闭worker进程:
kill -WINCH 14459
之后,在通过ps查看运行进程:
root 14459 1 0 21:33 ? 00:00:00 nginx: master process ./nginx
root 17398 14459 0 21:54 ? 00:00:00 nginx: master process ./nginx
nobody 17399 17398 0 21:54 ? 00:00:00 nginx: worker process
可以发现,旧的master进程还在运行,这是为了假如新的进程运行出现问题,可以马上通过旧的master进程复原。没有问题之后我们可以把旧的master进程kill掉就可以了。
日志切割
在进程还在运行时候,日志逐渐变得很大,当想要把原来的日志切割出来,可以使用reopen命令实现。
-rw-r–r-- 1 root root 51 Feb 20 22:01 test.log
在logs目录下,把51B大小的日志拿出来,可以先把日志拿出来:
mv test.log test.log.bak
../sbin/nginx -s reopen
执行后日志test.log已经重新被覆写。
这样做较为麻烦,实际使用时候写个脚本实现。
本文介绍了Nginx的配置重载、热部署过程以及日志切割的方法。重载时,可以通过发送信号实现配置更新;热部署时,无需停止服务即可完成升级;日志切割则利用命令在不影响服务的情况下完成日志文件的管理和分离。
252

被折叠的 条评论
为什么被折叠?



