码迷,mamicode.com
首页 > 其他好文 > 详细

日志大了,怎么办?用我的日志切割脚本吧!

时间:2017-12-17 19:25:59      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:$1   方式   job   www   tps   position   $2   bin   color   

本文转载自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
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作!

日志大了,怎么办?用我的日志切割脚本吧!

标签:$1   方式   job   www   tps   position   $2   bin   color   

原文地址:http://www.cnblogs.com/abc8023/p/8052769.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!