shell脚本日志清理和压缩

1、日志结构
/opt/online/{123com,abccom}/log/online[1-9]/[a-z]

2、变量说明
#是否开启压缩功能(0:关闭,1:开启;若关闭压缩功能,则compressdayn无效)
needcompress=1
删除14天以前的日志
deldayn=14
前1天
lastdayn=1
服务类型
allsvrtype="online1 online2 online3"
压缩5天前的日志
compressdayn=5

3、计划任务使用方法:
将该脚本本身copy到/opt/online下;
crontab中配置成:
#30 0 * * * cd /opt/online && chmod +x cleanlog.sh && ./cleanlog.sh >/dev/null 2>&1

cat cleanlog.sh
#!/bin/bash
#--------------------------------------------------  
#Created:2015-05-18
#Author:jimmygong
#Mail:[email protected]
#Function:
#Version:1.0
#--------------------------------------------------
allsvrtype="online1 online2 online3"
deldayn=14
needcompress=1
compressdayn=5
lastdayn=1

alldomain="123com abccom"
allsubdir="a b c d e f g h i j k l m n o p q r s t u v w x y z"
rootdir="/opt/online"
dirtobedelname="tobedel"

lastday=`date -d "$lastdayn days ago" +%Y%m%d`
compressday=`date -d "$compressdayn days ago" +%Y%m%d`
delday=`date -d "$deldayn days ago" +%Y%m%d`

function cleandir ()
{
    local ldir="$1"
    local lfiles=
    local lfile=

    lfiles=`ls -1 $ldir | xargs`
    for lfile in $lfiles
    do
        rm -f $ldir/$lfile
    done
}

function compressdir ()
{
    local ldir="$1"
    local lfiles=
    local lfile=
    local lcompressedtarget="$ldir/$compressday.tar.gz"
    # to prevent duplicate-compress
    if [[ -f $lcompressedtarget ]]
    then
        return
    fi
    tar zcvf $ldir.tar.gz $ldir
    if [[ $? -ne 0 ]] ; then
        return
    fi
    lfiles=`ls -1 $ldir | xargs`
    for lfile in $lfiles
    do
        rm -f $ldir/$lfile
    done
    if [[ -f $ldir.tar.gz ]] ; then
        mv $ldir.tar.gz $lcompressedtarget
    fi
}

function handleonelogdir ()
{
    local ldir="$1"
    local lscandir="$ldir/$dirtobedelname"
    local lmvdir="$lscandir/$lastday"
    local lones=
    local lone=
    local lonefull=
    mkdir -p $lscandir
    # remove
    lones=`ls -1 $lscandir | grep $delday | xargs`
    for lone in $lones
    do
        lonefull="$lscandir/$lone"
        if [[ -d $lonefull ]] ; then
            cleandir $lonefull
            rm -rf $lonefull
        elif [[ -f $lonefull ]] ; then
            rm -f $lonefull
        fi
    done
    # compress
    if [[ $needcompress -eq 1 ]]
    then
        lones=`ls -1 $lscandir | grep $compressday | xargs`
        for lone in $lones
        do
            lonefull="$lscandir/$lone"
            if [[ -d $lonefull ]]
            then
                compressdir $lonefull
            elif [[ -f $lonefull ]]
            then
                tar zcvf $lonefull.tar.gz $lonefull
            fi
        done
    fi
    # move last day‘s data
    mkdir -p $lmvdir
    lones=`ls -1 $ldir | grep $lastday | xargs`
    for lone in $lones
    do
        mv $ldir/$lone $lmvdir
    done
}

for domain in $alldomain
do
    domaindir="$rootdir/$domain"
    if [[ ! -d $domaindir ]]
    then
        continue
    fi
    for svrtp in $allsvrtype
    do
        svrtplogdir="$domaindir/log/$svrtp"
        if [[ ! -d $svrtplogdir ]]
        then
            continue
        fi
        for sub in $allsubdir
        do
            svrtplogsubdir="$svrtplogdir/$sub"
            if [[ ! -d $svrtplogsubdir ]]
            then
                continue
            fi
            handleonelogdir "$svrtplogsubdir"
        done
    done
done

exit 0
时间: 2024-10-06 08:09:15

shell脚本日志清理和压缩的相关文章

采用shell脚本定时清理Tomcat日志

1 Shell脚本案例 删除超过30天的日志文件 #!/bin/bash log_path=/mnt/software/apache-tomcat-9.0.0.M22/logs d=`date +%Y-%m-%d` d90=`date -d'30 day ago' +%Y-%m-%d` #cd ${log_path} && cp catalina.out $log_path/cron/catalina.out.$d.log #echo > catalina.out rm -rf $l

shell脚本规范与变量运用

前言随着Linux系统在企业中应用的越来越多,服务器自动化管理也变得越来越重要.Linux服务器自动化维护工作中,除了计划任务的设置外,shell脚本的应用也是非常重要的一部分.什么是shell脚本Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的.但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令.shell脚本的应用场景:

Linux下添加shell脚本使得nginx日志每天定时切割压缩

Linux下添加shell脚本使得nginx日志每天定时切割压缩一 简介 对于nginx的日志文件,特别是access日志,如果我们不做任何处理的话,最后这个文件将会变得非常庞大 这时,无论是出现异常时查日志,还是使用"GoAccess"等工具对日志进行分析都将会变得非常麻烦.因此,每天定时对nginx日志进行切割压缩就非常有必要了 二 实现 我的实现思路是每天晚上接近12点时定时执行脚本.其脚本内容就是将当前的nginx日志先按照当天日期进行重命名接着进行压缩,最后是新建空白的ngi

shell脚本----周期压缩备份日志文件

一.日志文件样式 二.目标 1.备份压缩.log结尾&&时间样式为“date +%Y%m%d”的日志文件(如:20170912.20160311等) 2.可指定压缩范围(N天前至当天):如:今天.昨天(date -d "-1 day" +%Y%m%d)至今天.前天至今天 压缩命名格式为:日期.tar.gz(或:日期.tar.bz2),压缩N天范围内文件后将会生成N个压缩包 3.可指定压缩模式(二选一):tar czf  或  tar cjf 4.可指定删除范围:删除N天

Linux定时对日志批量打包Shell脚本及定时任务crontab 详细用法

一.需求背景     因此次项目的生产环境中部署了多套系统,每天会产生大量的日志(数百GB的量),侵占了服务器宝贵的存储资源空间.为了有效缓解服务器存储压力,考虑通过Linux的Shell脚本结合crontab定时每周一对上周7天的日志打包压缩,并删除原被打包的日志文件,以腾出更多可利用的存储资源空间. 对于初次接触Shell脚本的同学,建议先花几个小时时间学习一下Shell.附Shell教程链接如下: http://www.runoob.com/linux/linux-shell-proces

通过shell脚本实现对oracle RMAN备份集压缩并异地备份

1.背景说明 公司磁带库坏了..每天oracle的备份往哪里放? 2.备份方式重新规划 原备份方式 现备份方式 3.备份脚本分享 小白写了一个备份的shell脚本,分享出来 #!/bin/bash # tar oraclebackup file   # check RMAN is run? #我做RMAN备份的时候都会创建一个RMAN日志,所以此日志就可以判断我的RMAN是否执行了 filename="/mnt/rman/log/RmanBackup_`date +%y%m%d`.log&quo

脚本要求:两类机器一共300多台,写个脚本自动清理这两类机器里面的日志文件。

要求:两类机器一共300多台,写个脚本自动清理这两类机器里面的日志文件.在堡垒机批量发布,也要批量发布到crontab里面. A类机器日志存放路径很统一,B类机器日志存放路径需要用*匹配(因为这个目录里除了日志外,还有其他文件,不能删除.匹配的时候可用*.log) A类:/opt/cloud/log/   删除7天前的B类: /opt/cloud/instances/  删除15天前的 要求写在一个脚本里面.不用考虑堡垒机上的操作,只需要写出shell脚本. #!/bin/bash dir1=/

Linux/Centos Tomcat 配置日志切分以及脚本自动清理

Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache,Sun和其他一些公司及个人共同开发而成.由于有了Sun的参与和支持,最新的Servlet和JSP规范总是能在Tomcat中得到体现,Tomcat 5支持最新的Servlet 2.4和JSP 2.0规范.因为Tomcat技术先进,性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器. Tomca

常见的一些shell脚本书写,定时删除,压缩备份

删除与备份videoportal日志 写执行删除过期日志的shell脚本 以下参考文档:https://blog.csdn.net/yuan882696yan/article/details/77885339 执行删除 /home/test/REPORT/send/videoportal23890234823904.txt这个目录下文档(当前是保留五天日志) 定时任务执行这个目录下的shell脚本:   /home/myshell/test.sh  (需要进行赋权操作chmod +x test.