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]

浙公网安备 33010602011771号