Nginx本身不提供日志切割功能,但可以通过以下几种方式实现日志切割:
/etc/logrotate.d/nginx
:/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
配置说明:
daily
:每天轮转rotate 14
:保留14个日志文件compress
:压缩旧日志delaycompress
:延迟压缩前一个日志文件create
:创建新日志文件并设置权限postrotate
:通知Nginx重新打开日志文件测试配置:
logrotate -d /etc/logrotate.d/nginx # 测试
logrotate -f /etc/logrotate.d/nginx # 强制执行
/usr/local/bin/nginx_logrotate.sh
:#!/bin/bash
LOGS_PATH=/var/log/nginx
DATE=`date -d "yesterday" +%Y-%m-%d`
PID=/var/run/nginx.pid
for LOG in `ls $LOGS_PATH/*.log`; do
mv $LOG $LOGS_PATH/$(basename $LOG .log)-$DATE.log
done
kill -USR1 `cat $PID` # 通知Nginx重新打开日志文件
# 可选:压缩7天前的日志
find $LOGS_PATH -name "*.log" -mtime +7 -exec gzip {} \;
chmod +x /usr/local/bin/nginx_logrotate.sh
0 0 * * * /usr/local/bin/nginx_logrotate.sh
某些Linux发行版(如CentOS/RHEL)已预配置了nginx的logrotate,只需确认:
ls /etc/logrotate.d/nginx
kill -USR1
通知Nginx重新打开日志文件gzip
压缩旧日志节省空间以上方法中,使用logrotate是最标准、最推荐的方式,大多数Linux发行版都默认安装了logrotate工具。