Shell实现删除历史日志


shell脚本实现删除历史日志的四种情况

删除历史日志是经常碰到的问题,总结一下大概有四种情况。注明:shell不支持代码后跟注释,我添加的注释只是为了理解,请使用时留意。

第一种:

日志在命名的时候已经添加了时间戳,删除N天前的日志,以15天为例。时间戳以yyyy-mm-dd为例。

代码:

Forder="/../logs"       #日志路径,自己定义
rm -rf $Folder/*`date -d -15day +%Y-%m-%d`*       #删除15天前的
rm -rf $Folder/*`date -d -16day +%Y-%m-%d`*       #删除16天前的
rm -rf $Folder/*`date -d -17day +%Y-%m-%d`*       #删除17天前的,设置为每天执行一次,删除后延3天的就够了。

这个命令的优势是占用内存极小,不需要检索,直接定位,推荐使用。当然前提是得有一个良好的命名习惯。

第二种:

日志在命名的时候没有添加时间戳,删除N天前的日志,以15天为例。

代码:

Forder="/../logs"       #日志路径,自己定义

find $Forder/ -mtime +15 -name "*.log" -exec rm -rf {} \;

第三种:每天的个别日志增长量过大,需要删除部分日志文本内容,保留最新的一部分,以保留最新的5000行为例。

代码:

#脚本功能:删除服务器日志文本冗余的行,保留最新的5000行。
Folder="/../logs"              #日志路径,自己定义
all_lines=`cat $Folder/filename.log | wc -l`       #定义总行
del_lines=`expr $all_lines - 5000`                  #定义要删除的边界行
sed -i 1,${del_lines}d $catalina_Folder/filename.log             #删除行

第四种:

每天的日志不是一个完整的文本,是由多个小文件构成,且命名为数字递增型。

例如某一天的日志命名为:1.log、2.log、3.log...................n.log

我们的需要做的是只保留最后的一部分,以20个为例。

代码:

#脚本功能:删除服务器当天的冗余日志,保留20个最近的日志。

Folder="/../`date +%Y-%m-%d`"       #获取当天日志路径,请自定义,非标准。
max=0

#将文件名称的最大值取出
for file_a in ${Folder}/*;do
    file_names=`basename $file_a | awk -F '.' '{print $1}'`
    if [ $file_names -gt $max ]
    then
        max=$file_names
    fi
done

#保留20个
delnumber=`expr $max - 20`

#将其他的删掉
for ((i=1;i<${delnumber};i++));do
    rm -rf ${Folder}/${i}.log
done

结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值