标签:ngin 日志分割
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
本文出自 “玩玩” 博客,请务必保留此出处http://lm3810.blog.51cto.com/846925/1860543
标签:ngin 日志分割
原文地址:http://lm3810.blog.51cto.com/846925/1860543