日志文件压缩

星期天,由于日志文件过大,服务商发短信通知机器的硬盘占用已经超过90%了,需要把日志压缩一下。
刚开始考虑使用logback自带的压缩,先进行调研,能否解决我们的问题,会不会引发其他问题?然后发现了这篇文章:logback日志压缩的问题, 可能需要改源码,代价太大,还是自己解决吧。
思考了一下,决定使用crontab 在凌晨跑下脚本压缩一下三天前的日志文件,写了以下脚本 autoZip.sh:

function autoZipFun(){
	#以三天为时间节点,压缩三天前的日志
	threeDaysAgo=`date -d '-2 day'  +%Y%m%d00`
	#文件夹路径
	local root=$1
	#遍历文件夹
	for i in $root/*
	do
		if [[ -d $i ]]
		then
			echo "$i 为 文件夹"
			#如果是文件夹,进入文件夹,递归调用autoZipFun
			autoZipFun $i
		elif [[ $i == *[[:digit:]]* && $i != *gz ]]
		then
		  #如果文件夹中包含数字,且不以gz结尾,那么认为这个文件是未压缩的日志文件
		  #获取文件名中的日期
			local currDate=`echo $(basename $i) | tr -cd "[0-9]"`
			#如果是三天前的日期,使用gzip压缩
			if [[ $currDate -lt $threeDaysAgo ]]
			then
				gzip $i
				echo "$i 已压缩完成"
			else
				echo "$i 为三天内的日志不需要压缩"
			fi
		else
			echo "$i 为已完成压缩历史文件"
		fi
	done
}
# 进入日志压缩函数,$1为传入的日志文件路径,如/data/logs/***-service/
autoZipFun $1

你可能感兴趣的:(运维,shell,logback)