• Jeson老师写的nginx切割脚本


    #Jeson
    
    #Email:jeson@iaskjob.com
    
    #变量定义:access、error日志文件列表
    
    NGINX_LOG=(imoocc_com_access iaskjob_com error)
    
    NGINX_ACCESS_PATH=/opt/logs/nginx/access
    
    NGINX_ERROR_PATH=/opt/logs/nginx/error
    
    #日期变量
    
    Ydate=`date -d yesterday +%Y%m%d`
    
    Adate=`date -d "20 days ago" +%Y%m%d`
    
    #PID文件和nginx.conf中定义一致
    
    Nginxpid=/opt/app/nginx/nginx.pid
    
    #日志的量,超过此值,触发切割
    
    Max_size=1000000
    
    file_size="NULL"
    
    #函数Get_Size,获取日志文件的大小。
    
    #rotate funcation
    
    function Get_Size(){
    
       logfile=$1
    
       file_size=`ls -l ${logfile}awk '{print $5}'`
    
       if [[ $file_size =~ [1-9]* ]];then
    
           echo $file_size
    
       else
    
           echo "error:cant get file ${logfile} size!"
    
           exit
    
       fi
    
    }
    
    #函数Log_Rotate,完成日志轮转切割。
    
    # rename log
    
    function Log_Rotate(){
    
        SIZE=$1
    
        ACCESS_FILE=$2
    
        BACK_DIR=$3
    
        echo "==============$SIZE $ACCESS_FILE"
    
        if [ $SIZE == "NULL"  ];then
    
            echo "######00000000"
    
            if [ ! -d ${BACK_DIR} ];then
    
                mkdir ${BACK_DIR}
    
            fi
    
            mv -f  ${ACCESS_FILE} ${BACK_DIR}/${Ydate}.log
    
            touch ${ACCESS_FILE}
    
            rm ${BACK_DIR}/${Adate}.log
    
        elif [ $SIZE -gt $Max_size ];then
    
            echo "#######11111111"
    
            if [ ! -d ${BACK_DIR} ];then
    
                mkdir ${BACK_DIR}
    
            fi
    
            mv -f  ${ACCESS_FILE} ${BACK_DIR}/${Ydate}.log
    
            touch ${ACCESS_FILE}
    
            rm ${BACK_DIR}/${Adate}.log
    
        fi
    
    }
    
    #主功能段,作用遍历日志,输入参数为size,则按照size进行切割,如果为day,则按照日常轮转进行。
    
    for logname in ${NGINX_LOG[@]}
    
    do
    
        if [ ${logname} == 'error' ];then
    
            LOG_FILE=${NGINX_ERROR_PATH}/${logname}.log
    
            BACK_DIR=${NGINX_ERROR_PATH}/${logname}
    
        else
    
            LOG_FILE=${NGINX_ACCESS_PATH}/${logname}.log
    
            BACK_DIR=${NGINX_ACCESS_PATH}/${logname}
    
        fi
    
        if [ $1 == "size" ];then
    
             file_size=`Get_Size ${LOG_FILE}`
    
             Log_Rotate ${file_size} ${LOG_FILE} ${BACK_DIR}
    
             echo $file_size
    
        elif [ $1 == "day" ];then
    
             Log_Rotate ${file_size} ${LOG_FILE} ${BACK_DIR}
    
        else
    
           echo "Param : $logname error!"
    
        fi
    
    done
    
    #給nginx发送一个信号量,让nginx重载,重新重新生成日志
    
    ## restart nginx
    
    [ ! -f $Nginxpid ]  kill -USR1 $(cat $Nginxpid)
  • 相关阅读:
    HO引擎近况2020712
    大地形初探小结一
    大地形初探之信息收集
    真实大地形初探
    翻译22 Unity中的曲面
    翻译21 平面和线框着色
    翻译20 视差和法线、高度图回顾
    翻译19 GPU Instance
    翻译18 Realtime GI & LPPV & LOD
    翻译17 Mixed Lighting混合光照
  • 原文地址:https://www.cnblogs.com/uglyliu/p/9349285.html
Copyright © 2020-2023  润新知