使用shell脚本维护日志目录

代码

#delete log
function check_log_store() {
    LOG_DIR=/opt/log
    critical_capacity=70000 # 70M, configurable, max disk usage of log
    # delete files generated 1 month ago when free disk space is less than 70M.
    critical_time=$(date -d "1 month ago" +%Y%m%d)
    #echo $critical_time
    #delete early log
    if [ $(du -s $LOG_DIR |awk '{print $1}') -ge $critical_capacity ]; then
        #echo $(du -s $LOG_DIR |awk '{print $1}')
        for i in $(ls $LOG_DIR); do
            #echo $i
            record=$(echo $i |awk -F "." '{count=1;do{print $count;count++;}while(count<=NF)}' |grep "20......-......" |cut -c 1-8 |awk '{if($0<'$critical_time'){print $0}}')
            #echo $record
            if [ -n "$record" ]; then
                #echo $i
                rm -f $LOG_DIR/$i
		echo "delete old log $LOG_DIR/$i"
            fi
        done
        #echo $(du -s $LOG_DIR |awk '{print $1}')
    fi

    #delete the earliest file for store
    while [ $(du -s $LOG_DIR |awk '{print $1}') -ge $critical_capacity ]; do
        #echo $(du -s $LOG_DIR |awk '{print $1}')
        delete_file=$(ls -lt $LOG_DIR | grep ^- | awk '{print $9}' |tail -1)
        if [ -n "$delete_file" ]; then
            rm -f $LOG_DIR/$delete_file
	    	echo "delete old log $LOG_DIR/$delete_file"
        fi
    done

    #remove all old links
    delete_link=$(ls -l $LOG_DIR | grep ^l | awk '{print $9}')
    for i in ${delete_link}; do
        rm -f $LOG_DIR/$i
		echo "remove old link $LOG_DIR/$i"
    done
}

思路

在容量到达界限之外后,先将一个月之前的日志删除,如果还未达到目标容量,再依次删除现存最老的日志文件,日志文件需要有特定的名称格式,需带有“年月日-时分秒”的对应时间戳,名称的其他部分不限,使用时间戳来作为日志文件名称,对查找定位bug位置也是有很大帮助的。一般情况下,程序对于日志文件的读写,都会在日志目录下放置一个指向需要读写文件的软链接,以达到程序解耦的目的。很多开源的日志文件工具,都会在程序启动时自动维护一个对应的软链接,如果自己写的话,也推荐使用软链接的方式来读写文件和应用程序,程序更新时,只需要删除旧的软链接,新建个同名的软链接指向新的程序或者日志文件,就可以不影响其他文件的情况下更新程序,对于这种软链接,在程序启动时,如果有实效的软链接,也会影响日志文件工具,创建新的链接,在这里,在每次启动时,删除掉旧的软链接,以防万一。

此脚本只维护单一一级文件目录下的文件的存储,如果是多级目录,请进行修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值