nginx日誌分割腳本

nginx 日誌分割,可以分割一年內沒有分割的日誌,以每天一個日誌文件打包

轉載請註明出處:http://lm3810.blog.51cto.com/846925/1860543


#!/bin/bash
#hls_nginx_log_cut.sh
#by Louis 2016/10/10
logs_path='/data/store/logs/www/'
#日誌文件所在路徑
files=`ls $logs_path`
backup_path='/data/store/backuplogs/'
#備份存放目錄
month_array=(`date +%b` `date -d '1 month ago' +%b`)
#當前月份和上月月份
current_year=`date +%Y`
#當前年份
current_date=`date +%Y_%m_%d`
#當前日期
check_dir(){
[ ! -d $backup_path ] && mkdir $backup_path
}
trans_month(){
	case $1 in 
		Jan) return 01;;
		Feb) return 02;;
		Mar) return 03;;
		Apr) return 04;;
		May) return 05;;
		Jun) return 06;;
		Jul) return 07;;
		Aug) return 08;;
		Sep) return 09;;
		Oct) return 10;;
		Nov) return 11;;
		Dec) return 12;;
	esac
}
#英文月份轉換爲數字月份,nginx日誌中有兩種日期,所以需要轉換
cut_history_logs(){
	day=$1
	for month in ${month_array[@]}
	do
		trans_month $month
		digit_month=`printf "%02d" $?`
		format_day=`printf "%02d" $day`
		dir_name=${current_year}_${digit_month}_${format_day}
		for file in $files
		do
			count=`awk '/'$format_day'\/'$month'\/'$current_year'|'$current_year'\/'$digit_month'\/'$format_day'/' ${logs_path}${file}|wc -w`
			#統計配到的設定日期的記錄數量,如果count=0就跳到下一個文件
			if [[ $count != 0 && $current_date != $dir_name ]];then
			[ ! -d /tmp/${dir_name} ] && mkdir /tmp/${dir_name}
			awk '/'$format_day'\/'$month'\/'$current_year'|'$current_year'\/'$digit_month'\/'$format_day'/' ${logs_path}${file}>>/tmp/${current_year}_${digit_month}_${format_day}/$file
			sed  -ri '/'$format_day'\/'$month'\/'$current_year'|'$current_year'\/'$digit_month'\/'$format_day'/d' ${logs_path}${file}
			fi
		done
		[ -d /tmp/${dir_name} ] && {
		cd /tmp/${dir_name}
		tar czf /${backup_path}/${current_year}_${digit_month}_${format_day}_nginx.tar.gz *
		rm -rf /tmp/${dir_name}
		}
	done			
}
tar_logs(){
	for day in {1..31}
	do
		cut_history_logs $day
	done
}
check_dir
tar_logs
/usr/local/nginx/sbin/nginx -s reload


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章