Nginx日志切割

一、使用Logrotate切割日志

创建Nginx配置

[root@localhost /]# vim /etc/logrotate.d/nginx

写入如下内容

/home/nginx/log/*/*.log {
        #以天为周期分割日志
        daily
        ##以日期为单位
        dateext
        #保留最近七天的日志
        rotate 7
        #忽略错误
        missingok
        #如果文件为空则不分割 not if empty
        notifempty
        #开始执行附加的脚本命令 nginx写日志是按照文件索引进行的 必须重启服务才能写入新日志文件
        sharedscripts
        postrotate
        #重启nginx服务
                [ ! -f /usr/local/nginx/logs/nginx.pid ] || kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
        endscript
}

检测全局配置

[root@localhost /]# /usr/sbin/logrotate -dv /etc/logrotate.conf

检测nginx配置

[root@localhost /]# /usr/sbin/logrotate -dv /etc/logrotate.d/nginx

强制执行

[root@localhost /]# /usr/sbin/logrotate -fv /etc/logrotate.d/nginx

二、使用Shell脚本切割日志

[root@localhost /]# vim /usr/local/script/nginx_cutlog.sh

写入如下内容:

#!/bin/bash
## 零点执行该脚本
## Nginx 日志文件所在的目录
LOGS_PATH=/home/nginx/log

## 获取昨天的 yyyy-MM-dd
YESTERDAY=$(date -d last-day +%Y-%m-%d)

## 移动文件
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
mv ${LOGS_PATH}/error.log ${LOGS_PATH}/error_${YESTERDAY}.log

## 向 Nginx 主进程发送 USR1 信号。USR1 信号是重新打开日志文件
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)

#删除7天前的日志
cd ${LOGS_PATH}
find ./ -mtime +7 -name "*20[0-9][0-9]*" | xargs rm -f

#或者
#find ./ -mtime +7 -name "*.log" | xargs rm -f
exit 0

 [THE END]

原文地址:https://www.cnblogs.com/configure/p/7358829.html