• 《转载》日志大了,怎么办?用我的日志切割脚本吧!


    本文转载自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
    来源:慕课网
    本文原创发布于慕课网 ,转载请注明出处,谢谢合作!
  • 相关阅读:
    Docker安装MySQL&Redis
    使用VirtualBox+Vagrant快速搭建Linux虚拟机环境
    Java集合工具类的一些坑,Arrays.asList()、Collection.toArray()...
    1.docker常用命令
    4. 带有延迟时间的Queue(DelayQueue)
    3. 基于优先级的Queue(PriorityBlockingQueue)
    2. 常见的Queue
    1. 模拟Queue
    14. 线程调度
    13. 线程池
  • 原文地址:https://www.cnblogs.com/abc8023/p/8052769.html
Copyright © 2020-2023  润新知