计算机网络/计算机科学与应用/系统/运维/开发

Nginx 日志切割

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


顺,不妄喜;逆,不惶馁;安,不奢逸;危,不惊惧。--史记

评论

^