zoukankan      html  css  js  c++  java
  • 《转载》日志大了,怎么办?用我的日志切割脚本吧!

    本文转载自https://www.imooc.com/article/13260

    分享一个脚本,它配合linux系统的crontab任务,对nginx自动日志切割和清理,分别作用于ACCESS和ERROR的日志。

    特点:

    1、功能丰富

    应有的功能中,不仅支持按天切割,而且支持通过通过设置文件大小作切割。

    2、通用

    通用于nginx、tengine,通过简单改进也能有好的支持切割清理httpd、lightd等其他Web server 日志。

    3、更加易于理解

    用shell方式相对更加好理解,并且易于后续的维护和功能的添加。

    好了,话不多说直接上脚本:

    #!/bin/bash
    
    #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)

    分享一个脚本,它配合linux系统的crontab任务,对nginx自动日志切割和清理,分别作用于ACCESS和ERROR的日志。

    特点:

    1、功能丰富

    应有的功能中,不仅支持按天切割,而且支持通过通过设置文件大小作切割。

    2、通用

    通用于nginx、tengine,通过简单改进也能有好的支持切割清理httpd、lightd等其他Web server 日志。

    3、更加易于理解

    用shell方式相对更加好理解,并且易于后续的维护和功能的添加。

    好了,话不多说直接上脚本:


    作者: 幕客技术
    链接:https://www.imooc.com/article/13260
    来源:慕课网
    本文原创发布于慕课网 ,转载请注明出处,谢谢合作!

    分享一个脚本,它配合linux系统的crontab任务,对nginx自动日志切割和清理,分别作用于ACCESS和ERROR的日志。

    特点:

    1、功能丰富

    应有的功能中,不仅支持按天切割,而且支持通过通过设置文件大小作切割。

    2、通用

    通用于nginx、tengine,通过简单改进也能有好的支持切割清理httpd、lightd等其他Web server 日志。

    3、更加易于理解

    用shell方式相对更加好理解,并且易于后续的维护和功能的添加。

    好了,话不多说直接上脚本:


    作者: 幕客技术
    链接:https://www.imooc.com/article/13260
    来源:慕课网
    本文原创发布于慕课网 ,转载请注明出处,谢谢合作!

    分享一个脚本,它配合linux系统的crontab任务,对nginx自动日志切割和清理,分别作用于ACCESS和ERROR的日志。

    特点:

    1、功能丰富

    应有的功能中,不仅支持按天切割,而且支持通过通过设置文件大小作切割。

    2、通用

    通用于nginx、tengine,通过简单改进也能有好的支持切割清理httpd、lightd等其他Web server 日志。

    3、更加易于理解

    用shell方式相对更加好理解,并且易于后续的维护和功能的添加。

    好了,话不多说直接上脚本:


    作者: 幕客技术
    链接:https://www.imooc.com/article/13260
    来源:慕课网
    本文原创发布于慕课网 ,转载请注明出处,谢谢合作!

    分享一个脚本,它配合linux系统的crontab任务,对nginx自动日志切割和清理,分别作用于ACCESS和ERROR的日志。

    特点:

    1、功能丰富

    应有的功能中,不仅支持按天切割,而且支持通过通过设置文件大小作切割。

    2、通用

    通用于nginx、tengine,通过简单改进也能有好的支持切割清理httpd、lightd等其他Web server 日志。

    3、更加易于理解

    用shell方式相对更加好理解,并且易于后续的维护和功能的添加。

    好了,话不多说直接上脚本:


    作者: 幕客技术
    链接:https://www.imooc.com/article/13260
    来源:慕课网
    本文原创发布于慕课网 ,转载请注明出处,谢谢合作!

    分享一个脚本,它配合linux系统的crontab任务,对nginx自动日志切割和清理,分别作用于ACCESS和ERROR的日志。

    特点:

    1、功能丰富

    应有的功能中,不仅支持按天切割,而且支持通过通过设置文件大小作切割。

    2、通用

    通用于nginx、tengine,通过简单改进也能有好的支持切割清理httpd、lightd等其他Web server 日志。

    3、更加易于理解

    用shell方式相对更加好理解,并且易于后续的维护和功能的添加。

    好了,话不多说直接上脚本:


    作者: 幕客技术
    链接:https://www.imooc.com/article/13260
    来源:慕课网
    本文原创发布于慕课网 ,转载请注明出处,谢谢合作!
  • 相关阅读:
    Thinking in Java Reading Note(9.接口)
    Thinking in java Reading Note(8.多态)
    Thinking in Java Reading Note(7.复用类)
    SQL必知必会
    Thinking in Java Reading Note(5.初始化与清理)
    Thinking in Java Reading Note(2.一切都是对象)
    鸟哥的Linux私房菜笔记(1.基础)
    Thinking in Java Reading Note(1.对象导论)
    CoreJava2 Reading Note(2:I/O)
    CoreJava2 Reading Note(1:Stream)
  • 原文地址:https://www.cnblogs.com/abc8023/p/8052769.html
Copyright © 2011-2022 走看看