#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=

file_size="NULL"

#函数Get_Size,获取日志文件的大小。

#rotate funcation

function Get_Size(){

   logfile=$

   file_size=`ls -l ${logfile}awk '{print $5}'`

   if [[ $file_size =~ [-]* ]];then

       echo $file_size

   else

       echo "error:cant get file ${logfile} size!"

       exit

   fi

}

#函数Log_Rotate,完成日志轮转切割。

# rename log

function Log_Rotate(){

    SIZE=$

    ACCESS_FILE=$

    BACK_DIR=$

    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 [ $ == "size" ];then

         file_size=`Get_Size ${LOG_FILE}`

         Log_Rotate ${file_size} ${LOG_FILE} ${BACK_DIR}

         echo $file_size

    elif [ $ == "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)

Jeson老师写的nginx切割脚本的更多相关文章

  1. Nginx日志定时切割脚本

    nginx的日志文件如果你不处理,将变得越来越大,我们可以写一个nginx日志切割脚本来自动切割日志文件. 第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志.在你未重新打开 ...

  2. nginx切割日志脚本

    nginx切割日志脚本 #!/bin/bash #cut nginx log #2018年9月26日14:26:44 #by jiajiezhao ########################## ...

  3. Nginx Java 日志切割脚本

    Nginx日志切割脚本: #!/bin/bash ########################################################################### ...

  4. nginx学习笔记(四)-----日志切割脚本及定时任务

    一.日志切割脚本 #!/bin/sh #nginx目录 BASE_DIR=/usr/local/nginx #生成的日志 BASE_FILE_NAME=jonychen.access.log CURR ...

  5. shell按日期自动切割nginx日志脚本

    shell按日期自动切割nginx日志脚本 参考:自学it网 http://www.zixue.it/. #nginx日志切割脚本 #author:ce #!/bin/bash #设置日志文件存放目录 ...

  6. nginx日志按日期自动切割脚本

    #!/bin/bash #nginx日志切割脚本 #author:setevn #设置日志文件存放目录 logs_path="/usr/local/nginx/logs/" #设置 ...

  7. linux Nginx 日志脚本

    这篇文章主要介绍了nginx日志切割脚本.nginx日志分析脚本等,需要的朋友可以参考下. 参考自:http://www.jbxue.com/article/13927.html 任务计划 cront ...

  8. 如何写SysV服务管理脚本

    本文目录: 1.1 SysV脚本的特性1.2 SysV脚本要具备的能力1.3 start函数分析1.4 stop函数分析1.5 reload函数分析1.6 status.restart.force-r ...

  9. Ubuntu 16.04开机自启Nginx简单脚本

    本文要记述的是最简单的Ubuntu下开机自启 nginx的脚本 这里将nginx装在了/usr/local/nginx目录下,nginx本身没有注册成服务,所以直接使用服务开机自启是不行的,除非自己写 ...

随机推荐

  1. 寒假作业2——Pintia小作业及编程题

    编程题(电梯)       Click to Github       听华一大大说可以用回溯算法,熟练运用搜索引擎的我就百度了一下,琢磨了很多天以为自己会了,真的看到题目还是一脸懵逼(#`-_ゝ-) ...

  2. lintcode-450-K组翻转链表

    450-K组翻转链表 给你一个链表以及一个k,将这个链表从头指针开始每k个翻转一下. 链表元素个数不是k的倍数,最后剩余的不用翻转. 样例 给出链表 1->2->3->4->5 ...

  3. [二叉查找树] 1115. Counting Nodes in a BST (30)

    1115. Counting Nodes in a BST (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Y ...

  4. Java第一次笔记

  5. Node.js系列——(2)发起get/post请求

    服务器与浏览器的交互主要方式有get/post请求. 下面,我们来看一下node.js发起get/post请求. 1.get 由于get请求的参数在url后面,所以相对比较简单.node.js中的ur ...

  6. 解决svn "cannot set LC_CTYPE locale"的问题

    解决svn "cannot set LC_CTYPE locale"的问题 在ubuntu 8.10下安装的svn,在将Ubuntu的语言修改为英文之后,出现错误警告: $ svn ...

  7. Hibernate 中一级缓存和快照区的理解

    刚刚开始的时候觉得这个快照区很难理解,在网上看了很多博客之后,开始明白了.我是结合 ADO.NET 理解的,在ADO.NET 中有一个类, 叫 SqlCommandBuilder,在我看来,他就是 A ...

  8. [LeetCode] [LeetCode] Populating Next Right Pointers in Each Node II

    Follow up for problem "Populating Next Right Pointers in Each Node". What if the given tre ...

  9. solrCloud源码分析之CloudSolrClient

    CloudSolrClient是solrj提供的客户端与solrCloud交互的类.该类的实例与zookeeper进行通信来确定solrCloud collections中的solr endpoint ...

  10. CF697D-Puzzles

    题目 一棵树,从根节点开始dfs,每层以随机顺序进入每个子节点,问走到每个点的时候期望经过了多少个点. (这里经过多少个点指的是经过多少个不同的点,即经过一个点多次算一个) (其实这个题不如说求期望d ...