有思俱乐部学习园地

日志文件自动移动


前言

日志文件过大会占用服务器硬盘空间,导致服务无法正常运行,故文件过大时需转移至MooseFS。

安装MooseFS客户端

点我进入

提示:需设置开机自启

脚本编写

vim /root/automovelogfiles.sh
#!/bin/bash
#设置文件路径
logpath=/var/log
#移动到哪个文件夹
moveto=/mnt/mfs/log
#设置文件最大到多少MB
MB=1024
#网卡地址
net=ens160

###以上内容根据需求/情况修改

#计算到Byte
maxsize=$((1024*1024*$MB))
#获取本机IP
ip=`/sbin/ifconfig $net|grep "inet addr:"|awk -F":" '{print $2}'|awk '{print $1}'`
#根据IP新建文件夹
mkdir -p $moveto/$ip
#获取log路径的长度
logpathlength=`echo $logpath | awk '{print length($0)}'`

#获取时间
time=`date +%Y%m%d%H%M%S`
#自定义函数
check() {
        #循环输入的路径
        for dir in $1
        do
                #获取去除logpath的内容(便于生成树目录)
                partPath=${dir:$logpathlength}
                #判断是否在log根目录
                if [ "$partPath" = "" ]
                then
                        realMovePath=$moveto/$ip/$time
                else
                        realMovePath=$moveto/$ip/$time/$partPath
                fi

                ###日志文件处理
                #获取除了gz以外的带log的所有文件
                logfiles=`find $dir -maxdepth 1 -mindepth 1 -type f ! -name "*.gz"`
                #遍历logfiles
                for log in $logfiles
                do
                        if [ ! -n "`basename $log | grep "log"`" ]
                        then
                                #如果名称不含"log"则跳过
                                continue
                        fi
                        #获取当前log大小
                        logsize=`du -b $log | awk '{ print $1 }'`
                        #判断是否超过了大小
                        if [ $logsize -ge $maxsize ]
                        then
                                #通过logMovePath创建文件夹
                                mkdir -p $realMovePath
                                #打包压缩文件
                                tar zcf $realMovePath/`basename $log`.tar.gz -C `dirname $log` `basename $log`
                                #清空log文件
                                cat /dev/null > $log
                        fi
                done

                ###系统自动压缩文件处理
                #获取所有gz文件
                gzfiles=`find $dir -maxdepth 1 -mindepth 1 -type f -name "*.gz"`
                #遍历gzfiles
                for gz in $gzfiles
                do
                        if [ ! -n "`basename $gz | grep "log"`" ]
                        then
                                #如果名称不含"log"则跳过
                                continue
                        fi
                        #创建文件夹
                        mkdir -p $realMovePath
                        #移动文件(不进行大小判断)
                        mv $gz $realMovePath
                done

                ###文件夹处理
                #获取dir目录下所有文件夹
                dirlist=`find $dir -maxdepth 1 -mindepth 1 -type d`
                #遍历dirlist
                for dirname in $dirlist
                do
                        #继续调用函数
                        check $dirname
                done
        done
}

#执行函数
check $logpath

#解压示例
#tar xvf access.log.tar.gz

并使用chmod +x命令给予执行权限。

添加定时任务

crontab -e

选择任意文本编辑工具

添加以下内容

*/1 * * * * bash /root/automovelogfiles.sh

以上文本将每分钟执行一次脚本

工作人员

 
作者:
信息录入: