Nginx日志切割
日志切割是线上很常见的操作,能够控制单个日志文件的大小,便于对日志进行管理
1、针对nginx的访客日志进行切割
[root@VM-4-2-centos logs]# ll -h total 3.0M -rw-r--r-- 1 root root 2.1M Jul 28 17:08 access.log -rw-r--r-- 1 root root 912K Jul 28 17:07 error.log -rw-r--r-- 1 root root 6 Jul 28 16:45 nginx.pid
2、给日志文件重命名,注意使用mv命令
# mv access.log "access.log_$(date +"%Y-%m-%d")"
3、发送信号给nginx主进程,给她发送一个重新打开的信号,让nginx生成新的日志文件
nginx -s reopen # 等同于kill -USR1 `cat nginx.pid`
[root@VM-4-2-centos logs]# nginx -s reopen [root@VM-4-2-centos logs]# ls access.log access.log_2022-07-28 error.log nginx.pid [root@VM-4-2-centos logs]# ll -h total 3.0M -rw-r--r-- 1 nobody root 0 Jul 28 17:34 access.log -rw-r--r-- 1 root root 2.1M Jul 28 17:08 access.log_2022-07-28 -rw-r--r-- 1 nobody root 912K Jul 28 17:34 error.log -rw-r--r-- 1 root root 6 Jul 28 16:45 nginx.pid
4、注意在以上的nginx重命名日志切割链,不要着急立刻对文件修改,而是要注意等待几分钟,因为nginx的工作模式特点
master下发指令给worker去干活,刚发指令的时候只是一个标记,当业务量很大的时候,这个修改操作可能会有点慢,不会立即生效
5、在生产环境下,日志切割主要是以定时任务的形式来操作
编写一个定时日志切割脚本
vim cut_nginx_log.sh 写入如下内容
#!/bin/bash
# 脚本写入crontab,每天0点执行,这是一个nginx日志切割脚本
# nginx日志存放点
logs_path="/usr/local/nginx/logs/"
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
# 也能换成 nginx -s reopen
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
6、把该脚本的执行加入crontab 每天0点执行
crontab -e # 打开定时任务
* * * * * 命令
0 0 * * * /bin/bash /myscript/cut_nginx_log.sh
查看生成的日志格式
-rw-r--r-- 1 nobody root 0 Jul 28 17:34 access_2022-07-27.log [root@VM-4-2-centos 07]# pwd /usr/local/nginx/logs/2022/07