日誌壓縮

#!/bin/bashbash

#define:清除cm日誌
############## $1 表明/data/log/cm 保留的天數 ##############
############## $2 表明/data/log/cm/backup 保留的天數  ##############服務器

Basics_dir="/data/log/cm"
scripts_dir="/data/scripts"
#local_ip=`ifconfig |grep inet |grep broadcast|awk '{print $2}'`日誌

####rsync傳輸須要用到的值
rsync_user=username
rsync_server=IP
rsync_passwd=`echo "$3"`
rsync_module=data2
###計數器峯值
timer_peak=5server


umcompres_num=`echo "$1"`
transferr_num=`echo "$2"`
parameter_sum=`echo "$#"`
#find ./ -mtime +10 |grep catalina.out|xargs rm -fip

logdir=$Basics_dir          #日誌路徑
log=$logdir/log.log            #日誌文件 
is_font=1                #終端是否打印日誌: 1打印 0不打印 
is_log=1                 #是否記錄日誌: 1記錄 0不記錄同步


####判斷傳入的位移參數的數量
judge_parameter() {
    if [[ "$parameter_sum" -ne 3 ]];then
        echo "Usage:[number/保留天數],[number/本地壓縮保留天數],[rsync_server/密碼]"
        exit 1
    else
        echo "$rsync_passwd" > $scripts_dir/rsync_passwd
        chmod 600 $scripts_dir/rsync_passwd
        passwd="$scripts_dir/rsync_passwd"    
    fi
}it

datef(){
    date "+%Y-%m-%d %H:%M:%S"
}ast

print_log(){
    if [[ $is_log -eq 1  ]];then
        [[ -d $logdir ]] || mkdir -p $logdir
        echo -e "[ $(datef) ] $1" >> $log
    fi
    if [[ $is_font -eq 1  ]];then
        echo -e "[ $(datef) ] $1"
    fi
}awk


cd $Basics_dir
log_compres(){
    read_compress_file=`find ./ -mtime +$umcompres_num |grep catalina.out|grep -v % |cut -d"/" -f2`
    for file in $read_compress_file
    do
               print_log "日誌開始壓縮"
            DATE=`echo "$file"|cut -d"." -f3`
            back_dir="backup/$DATE"
            [[ -d $back_dir ]]|| mkdir -p $back_dir
            [[ -f catalina.out."$DATE".tar.gz ]]&& mv $file $back_dir||tar -zcf $back_dir/cm"$DATE".tar.gz $file
            if [[ $? -eq 0 ]];then
                    print_log "$file 壓縮or傳輸成功"
            rm -f $file
               else
                    print_log "$file 壓縮or傳輸失敗"
               fimodule

            #rm -f $file
               print_log "日誌壓縮完畢"

    done
}

log_com_dir="$Basics_dir/backup"
log_dump() {
    cd $log_com_dir
    log_back_list=`ls -l | awk '{print $9}' |grep -v ^$`
    for transferr_log_dir in $log_back_list
    do
        ####日期轉換爲時間戳
        date1=`date -d "$transferr_log_dir" +%s`
        ####當天時間戳轉換
        date2=`date +%s`
        ####求差
        diff=$((`expr $date2 - $date1`/3600/24))
        if [[ $diff -gt $transferr_num ]];then
            #####時間大於指定的天數,須要傳輸至日誌存儲機器
            print_log "$transferr_log_dir 時間大於指定的天數,須要傳輸至日誌存儲機器,開始傳輸"
            #scp -i 祕鑰  $transferr_log_dir/catalina.out."$transferr_log_dir".tar.gz username@ip:dir
            ####利用rsync客戶端同步到服務器,這裏能夠用到多模塊同步,多個客戶端同時同步到服務
            timer=0
            while true
            do
                cd $Basics_dir/backup
                rsync -avzr --password-file=$passwd $transferr_log_dir $rsync_user@$rsync_server::$rsync_module
                if [[ $? -eq 0 ]];then
                    print_log "$transferr_log_dir 傳輸成功"
                    rm -rf $transferr_log_dir
                    timer=0
                    break
                elif [[ $timer -gt $timer_peak ]];then
                    print_log "$transferr_log_dir ,傳輸5次均失敗"
                    break
                else
                    print_log "$transferr_log_dir ,傳輸失敗"    
                    ####設置計數器自加
                    timer=$(($timer+1))
                fi
            done
            #rm -rf $transferr_log_dir
        else
            print_log "$transferr_log_dir 此目錄還沒達到指定天數,暫時不轉移"
        fi

    done


}

judge_parameter log_compres log_dump

相關文章
相關標籤/搜索