Shell + crontab 实现日志压缩归档
crontab
1 # archive the ats log file, keep 7 days. 2 */5 * * * * root /bin/sh /path/archive_atslog.sh >/dev/null 2>&1
shell
1 #!/bin/bash 2 # Author : standby 3 # Date : 2017-04-17 4 # Description : Archive the live log, keep the lastest 7 days. 5 6 logdir="/data/ats/logs" 7 TODAY=`date -d "6 minutes ago" +%Y%m%d` 8 9 function get_exter_ip() 10 { 11 arr=(`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk ‘{print $2}‘|tr -d "addr:"`) 12 exter_ip=${arr[0]} 13 for ip in ${arr[*]} 14 do 15 ip_tmp=`echo $ip | grep -v ‘^10\.‘` 16 if [[ ! -z $ip_tmp ]];then 17 break 18 fi 19 done 20 exter_ip=$ip_tmp 21 echo $exter_ip 22 } 23 IP=`get_exter_ip` 24 # rename log file 25 cd $logdir 26 for i in `ls access.log_*.old` 27 do 28 DATE=`echo $i |awk -F "[-.]" ‘{print $(NF-4)$(NF-3)}‘ |sed ‘s/[hms]//g‘` 29 mv $i live_${IP}_${DATE}_05min.log 30 done 31 32 subPath=$logdir/$TODAY/ 33 # gzip and archive log file 34 [ ! -d $subPath ] && mkdir -p $subPath 35 for i in `ls live_*.*_05min.log` 36 do 37 gzip $i 38 mv $i".gz" $subPath 39 done 40 41 # clean log files which 7 days ago 42 i=0 43 while [[ i -lt 7 ]] 44 do 45 weekDay[i]=`date -d "-${i} day" +"%Y%m%d"` 46 let i++ 47 done 48 for dir in `ls | grep -E "([0-9]{8})"` 49 do 50 [[ "${weekDay[@]}" =~ $dir ]] || rm -rf $dir 51 done
时间: 2024-11-13 10:17:22