使用linux自带的logrotate对nginx日志进行分割

如果开启了日志,但是没有对其处理,很可能不久日志文件就会上G,并且分析日志时会很不方便。最好是每天分割一下日志。分割日志很简单,可以使用系统自带的”logrotate”来管理日志文件,它可以实现日志的自动滚动,日志归档等功能。
涉及到以下几个文件:
/etc/logrotate.d/    logrotate配置
/usr/local/sbin/logrotate-.sh    日志分割脚本
1. logrotate配置:
[root@xylab]# vi /etc/logrotate.d/
/home/wwwlogs/*.log         #日志所在目录
{
nocompress                                     #不对日志文件进行转储压缩
daily                                                 #指定转储周期为每天
copytruncate                                   #用于还在打开中的日志文件,把当前日志备份并截断
create                                              #建立新的日志文件
ifempty                                            #即使是空文件也转储
olddir /home/wwwlogs/days            #转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
rotate 0                                           #指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5个备份
}
2.创建日志分割脚本:
[root@xylab]# vi /usr/local/sbin/logrotate-.sh

#!/bin/bash
#创建转储日志压缩存放目录
mkdir -p /home/wwwlogs/days
#手工对日志进行切割转换
/usr/sbin/logrotate -vf /etc/logrotate.d/
#当前时间
time=$(date -d “yesterday” +”%Y-%m-%d”)
#进入转储日志存放目录
cd /home/wwwlogs/days
#对目录中的转储日志文件的文件名进行统一转换
for i in $(ls ./ | grep “^\(.*\)\.[[:digit:]]$”)
do
mv ${i} ./$(echo ${i}|sed -n ’s/^\(.*\)\.\([[:digit:]]\)$/\1/p’)-$(echo $time)
done
#对转储的日志文件进行压缩存放,并删除原有转储的日志文件,只保存压缩后的日志文件>。以节约存储空间
for i in $(ls ./ | grep “^\(.*\)\-\([[:digit:]-]\+\)$”)
do
tar jcvf ${i}.bz2 ./${i}
rm -rf ./${i}
done
#只保留最近7天的压缩转储日志文件
find /home/wwwlogs/days/* -name “*.bz2″ -mtime 7 -type f -exec rm -rf {} \;

3. 给脚本附上执行权限
[root@xylab]#chmod a+x /usr/local/sbin/logrotate-.sh
可以手动执行下脚本,测试下是否成功

4. 放到crontab里执行
[root@xylab]#crontab -e
#logrotate, 每天0点0分执行,具体的时间设置可以google
0 0 * * * /usr/local/sbin/logrotate-.sh >/dev/null 2>&1

5.查看crond是否启动
[root@xylab]#ps -ef|grep cron
如果没有启动可以执行service crond start

6. 可以在/var/log/中查看cron执行日志

1月13日更新:

/usr/local/sbin/logrotate-.sh中最后一行改为+7

find /home/wwwlogs/days/* -name “*.bz2″ -mtime +7 -type f -exec rm -rf {} \;

本文来自: 使用linux自带的logrotate对nginx日志进行分割
本页面链接地址: http://bianworld.net/archives/272.html

您也许对以下文章感兴趣……

分类:空间

发表评论