当前位置: 首页 > news >正文

日志切割

logcut.sh

[root@localhost ~]# cat logcut.sh
#!/bin/bash
# 日期:2018/6/22
# 介绍:logcut.sh 简单的日志切割脚本,前3天的切割方便随时看,前4-10天的进行压缩,超出的删除
#
# 注意:会将其他带时间的日志压缩后删除
# 功能:日志切割 <日志格式: xxxxx.当前年-月-日.log> <压缩格式: xxxxx.当前年-月-日.tar.gz>
#
# 适用:centos6+
# 语言:中文

#流程
#主体:先检查是否是log文件,是则检查是否是切割后文件,不是则去切割,是则检查时间是否3天内的,3天外则压缩
#切割:检查是否有这个文件,有则将日志重定向到切割后的文件,清空日志。没有则复制一份,清空日志
#压缩:检查是否有这个文件,有则删除。压缩文件,并删除源文件
#检查压缩:检查是否有tar.gz结尾文件,有则匹配是否带时间,带时间则看是否超过10天,超过删除。不带时间则跳过



#[使用设置]
#日志文件所在目录,将切割这个文件夹下所有日志
log_dir=/ops/logs

#以切割形式保存的文件天数
date_cut=3

#以压缩形式保存的天数
date_yasuo=7



#[自动获取]
#当前年月日
date_now=`date +%F`

#当前年月
date_nian=`date +%Y-`

#前3天数组
date_cut_zu=($(for i in `seq 1 ${date_cut}`;do date -d -${i}days "+%F";done))

#前10天数组
date_time=`expr $date_cut + $date_yasuo`
date_yasuo_zu=($(for i in `seq 1 ${date_time}`;do date -d -${i}days "+%F";done))



#对日志名进行格式处理,$1填写要处理的文件
Format_Name() {
    local a=`echo ${1%%.log}`
    local b=`echo ${a%%-log}`
    echo $b
}

#对传入的日志文件进行切割处理,$1填写要切割文件
Cut_Log() {
    local file=`Format_Name $1`
    local cut_file="${file}.${date_now}.log"
    
    #先匹配是否已经有这个文件
    ls | grep "^${cut_file}$" &> /dev/null
    if [[ $? -eq 0 ]];then
        cat $1 >> $cut_file
        > $1
    else
        cp -p $i $cut_file
        > $1
    fi
}

#对当前文件进行压缩,$1填写要被压缩的文件
Yasuo_Log() {
    local file=`Format_Name $1`
    local yasuo_file="${file}.log.tar.gz"
    
    #先匹配是否已经有这个文件
    ls | grep "^${yasuo_file}$" &> /dev/null
    if [[ $? -eq 0 ]];then
        #有则删除,删除的都是3天中的,删除后从新打包
        rm -rf $yasuo_file
    fi

    tar -cf $yasuo_file $1
    rm -rf $i
}

#整理日志文件
Cut_Main() { 
    #获取所有日志文件,不包含压缩文件
    for i in `ls | grep .log$`
    do
        #挑出当月的日志文件,否则去压缩
        echo $i | grep ${date_nian} &> /dev/null
        if [[ $? -eq 0 ]];then
            local a=`Format_Name $i`
            local b=`echo ${a:(-10)}` #当前日志年月日
            #看是否在数组中,不在则压缩
            echo ${date_cut_zu[*]} |grep -w $b &> /dev/null
        #echo $date_now
            if [[ $? -ne 0 ]];then
                [[ "$b" != "$date_now" ]] && Yasuo_Log $i
            fi
        else
            Cut_Log $i
        fi
    done
}

#整理压缩的日志文件
Yasuo_Main() {
    #获取所有压缩包
    for i in `ls | grep .tar.gz$`
    do
        echo $i | grep ${date_nian} &> /dev/null
        if [[ $? -eq 0 ]];then
            local a=`echo ${i%%.log.tar.gz}`
            local b=`echo ${a:(-10)}` #当前日志年月日
        
            #看是否在数组中,不在则删除
            echo ${date_yasuo_zu[*]} |grep -w $b &> /dev/null
            if [[ $? -ne 0 ]];then
                [[ "$b" != "$date_now" ]] && rm -rf $i
            fi
        else
            #不是当月的,其他类型压缩包,跳过
            continue
        fi
    done
}



#开始
if [[ ! -d $log_dir ]];then
    echo "$log_dir not found"
    exit 1
fi
cd $log_dir

Cut_Main
Yasuo_Main

 

转载于:https://www.cnblogs.com/charon2/p/10382122.html

相关文章:

  • Visual Studio 代码折叠快捷键(摘要)
  • 中小型研发团队架构实践九:任务调度Job
  • 数组
  • golang 发送GET和POST示例
  • 监听器
  • 用Hexo搭建属于自己的Blog
  • ipcs命令详解
  • 多态
  • 个人站点的日期查询
  • 2017-2018年度Scrum现状报告发布
  • 我们的春节--2019
  • BZOJ 1412 狼和羊的故事
  • LeetCode29.两数相除 JavaScript
  • vim命令模式下光标移动+查找
  • Fastjson的基本使用方法大全
  • 【Linux系统编程】快速查找errno错误码信息
  • 【技术性】Search知识
  • AngularJS指令开发(1)——参数详解
  • Invalidate和postInvalidate的区别
  • Java知识点总结(JavaIO-打印流)
  • python 学习笔记 - Queue Pipes,进程间通讯
  • spring学习第二天
  • SQLServer插入数据
  • yii2权限控制rbac之rule详细讲解
  • 包装类对象
  • 闭包,sync使用细节
  • 浮现式设计
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 浅谈web中前端模板引擎的使用
  • 区块链将重新定义世界
  • 如何设计一个微型分布式架构?
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • ​如何防止网络攻击?
  • ​如何在iOS手机上查看应用日志
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • ​水经微图Web1.5.0版即将上线
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #Linux(Source Insight安装及工程建立)
  • (1)(1.11) SiK Radio v2(一)
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (2015)JS ES6 必知的十个 特性
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (六)Hibernate的二级缓存
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .net Application的目录
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .net mvc部分视图
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .NET开源快速、强大、免费的电子表格组件
  • .net连接MySQL的方法
  • .NET企业级应用架构设计系列之应用服务器