概述:很多时候我们在linux系统中需要对项目的日志进行保留期限的控制,最近遇到了这样一个需求,保留项目日志的7天,也就是一周的时间,其他的日志全部删除,由于每天产生的日志量比较大,个数也比较多,手动删除肯定是不现实了,所以写了下面这个简单的自动删除脚本。下面来看具体内容。
# more del.sh
_rootdir=/usr/prj/logs(自定义)
#日志以每月形式存放
_subdir=`date %Y-%m`
#计算当天要删除的日志文件个数
_delnum=$(ls -lhtr $_rootdir/$_subdir/ | grep -v total | awk '{print $7}' | uniq -c | head -n1 | awk '{print $1}')
#保留删除记录
ls -lhtr $_rootdir/$_subdir/ | grep -v total | head -n$_delnum | awk '{print $9}' > /tmp/del_$_delnum.txt
sleep 1
#计算日志已经产生的天数
_delline=$(ls -lhtr $_rootdir/$_subdir/ | grep -v total | awk '{print $7}' | uniq -c | wc -l)
#多于指定天数即开始删除,(自定义)
if [ $_delline -gt 7 ]; then
echo "gt 7, del !"
#达到删除条件,删除指定个数的日志文件
ls -lhtr $_rootdir/$_subdir/ | grep -v total | head -n$_delnum | awk '{print $9}' | xargs -i rm -rf $_rootdir/$_subdir/{}
else
echo "lt 7, no del !"
fi
#跨月的删除方法
#日志以上个月形式存放
_sublastdir=`date %Y-%m -d "-1 months"`
#计算日志已经产生的天数,用此判断上个月的日志是否已经删除完
_dellastline=$(ls -lhtr $_rootdir/$_sublastdir/ | grep -v total | awk '{print $7}' | uniq -c | wc -l)
if [ $_dellastline -gt 0 ]; then
echo "del!"
#计算当天要删除的日志文件个数
_dellastnum=$(ls -lhtr $_rootdir/$_sublastdir/ | grep -v total | awk '{print $7}' | uniq -c | head -n1 | awk '{print $1}')
#达到删除条件,删除指定个数的日志文件
ls -lhtr $_rootdir/$_sublastdir/ | grep -v total | head -n$_dellastnum | awk '{print $9}' | xargs -i rm -rf $_rootdir/$_sublastdir/{}
else
echo "null!"
fi
注意:
1、以上内容适用于日志按月的方式存储,的自动删除,或者需要手动改变目录结构。
2、以上项目日志目录需要自定义修改。
3、以上项目日志保留天使需要自定义修改,默认是保留7天。
4、将内容修改保存后,放入系统crontab按天执行即可。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。