本人默认大家都是Linux大佬
编译安装
make clean # 清理垃圾
./configure --prefix=/Users/tom/nginx1.20.2
make && make install
热升级
Nginx 采用了高度模块化的设计思路,并且内部的进程主要有两类,master 进程 和 worker 进程。其中 master 进程只有一个,worker 进程可以有多个。
nginx在执行./configure的时候–prefix指定的目录是需要指向旧的nginx所指向的prefix目录还是随便指向一个就行,答案是需要指向旧版本的nginx的安装目录
ps -ef | grep nginx 查看当前nginx master进程
kill -USR2 17440 #设定新的子进程开始接收用户的访问请求,旧的不再接受用户的访问请求
kill -WINCH 17440 # 进行旧服务进程的关闭,该pid号是旧版本的nginx的master进程的pid号
确认升级没问题就可以杀掉旧版master了. 有问题就版本回退
kill -HUP 17440 #注意这是旧版本的nginx进程pid号 (回退版本, 重新拉起旧版服务, 相当于-s reload)
kill -USR2 21081 kill -WINCH 21081 kill -QUIT 21081 回退成功
日志切割
- 手动
- 备份旧的log
- nginx -s reopen
- 自动 rotate.sh 脚本
#!/bin/bash
# Rotate logs
Nginx_PATH=your_nginx_path
LOGS_PATH=${Nginx_PATH}/logs
# YESTERDAY=$(date -d "yesterday" +%Y-%m-%d) # linux
YESTERDAY=$(date -v-1d +%Y-%m-%d) # mac
echo $LOGS_PATH
echo $YESTERDAY
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
mv ${LOGS_PATH}/error.log ${LOGS_PATH}/error${YESTERDAY}.log
# 向nginx 主进程发送USR1, 相当于-s reopen
kill -USR1 $(cat ${LOGS_PATH}/nginx.pid)
crontab -e 添加定时任务
00 00 * * * /bin/sh /Users/tom/nginx1.20.2/sbin/rotate.sh