linux 日志压缩及清理,日志文件定期压缩清除

对于日志, logback支持滚动压缩文件和保留一定时间的历史文件, 但是不能保证留存最近七天的 .log 文件, 并对最近30天的log文件进行压缩处理, 所以这里就通过shell命令和crontab来实现日志文件的定期压缩清除

autoZip.sh

首先我们的日志文件命名规则是 *.%d{yyyy-MM-dd}.log, 通过docker挂载到本地目录集中保存, 规律是 /data/logs/*/*.log 其中logs下为每个服务的目录

#!/bin/bash

function tarOrClear() {

point=`date -d '-7 day' +%s`

point2=`date -d '-30 day' +%s`

root=$1

dirs=`ls -F | grep /$`

for i in $dirs; do

echo "========= cd $root/$i"

cd $root/$i

files=`ls`

for fileName in $files; do

prefix=${fileName%%.*}

day=$( expr "$fileName" : '.*([0-9]{4}-[0-9]{2}-[0-9]{2}).*' )

if [[ $day != "" ]];then

dayTime=`date -d $day +%s`

# 30天以外的日志直接删除

if [[ $dayTime -lt $point2 ]];then

echo "rm $fileName"

rm $fileName

# 7天以外的日志压缩tar.gz, 删除原log文件

elif [[ $dayTime -lt $point ]];then

if [[ $fileName == *.log ]] && [[ ! -a $prefix.$day.tar.gz ]];then

echo "tar -czf $prefix.$day.tar.gz $fileName --remove-files"

tar -czf $prefix.$day.tar.gz $fileName --remove-files

fi

fi

fi

done

done

}

if [[ $# == 1 ]];then

tarOrClear $1

else

echo "请选定日志文件根目录, 日志文件位于 根目录/*/*.log"

fi

crontab定时任务

crontab -e 进入定时任务编辑

增加一行

0 1 * * * (sh /data/logs/autoZip.sh /data/logs) > /data/logs/console.log

保存退出

crontab -l 查看定时任务列表是否更新

这样在每天01:00, 服务器会自动执行 autoZip.sh 对 /data/logs/*/*.log 的日志文件进行压缩和清理

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值