日志清理

公司服务器硬盘最近满了,

执行du -h –max-depth=1一级一级顺着目录往下找,终于发现一个目录下存在大量相似名称的文件,而且每天都有新文件产生,查看一下几乎全是运行日志,占用了将近10个GB,于是写了个脚本放在cron中定期执行。

脚本用到的一些东西:

++++++++更新+++++++

文件名称中有日期的可以直接使用date命令,与字符串截取的方法类似但要简单许多

find . -name "usercenter-service-`date +%Y-%m-%d`.*.log"

时间命令
time=$(date ‘+%Y%m%d’ )
遍历获取文件名
for file_name in `ls`
do
file_path=&file_name
done
字符串截取
file_path=${file_name:0:17}
#从“0”开始获取“17”个字符
“[]”支持 -ge,-lt等运算符
“[[]]”支持 “&&”,”||”运算符
变量运算
`expr $month – 2`

 

完整脚本

#!/bin/bash

cd /logs/usercenter/format_log/history
year=`date '+%Y'`
month=`date '+%m'`
day=`date '+%d'`

for file_name in `ls`
do
    file_path1=${file_name:0:17}
    file_path2=${file_name:0:18}

    if [[ $file_path1 == usercenter-common || $file_path2 == usercenter-service ]]
        then
	    if [ $file_path1 == usercenter-common ]
		then
		    file_year=${file_name:18:4}
		    file_month=${file_name:23:2}
		    file_day=${file_name:26:2}
	    elif [ $file_path2 == usercenter-service ]
	        then
		    file_year=${file_name:19:4}
		    file_month=${file_name:24:2}
		    file_day=${file_name:27:2}
	    fi
	    if [[ $file_year -eq $year ]]
	    then
		if [ $file_month -lt `expr $month - 2` ]
		    then
			rm -rf $file_name
		fi
		if [ $file_month -eq `expr $month - 2` ]
		then
		    if [ $file_day -le $day ]
		        then
			    rm -rf $file_name
		    fi
		    fi
		fi
		if [[ $file_year -lt $year ]]
		then
		    if [ $month -ge 2 ]
			then
			rm -rf $file_name
		    elif [[ $month -eq 1 && $file_month -eq 11 ]]
			then
			    if [[ $file_day -le $day ]]
			        then
				    rm -rf $file_name
			    fi
		    elif [[ $month -eq 1 && $file_month -lt 11 ]]
		    then
			rm -rf $file_name
		    fi
		fi
	fi
done 

发表评论

电子邮件地址不会被公开。 必填项已用*标注