日志文件自动移动
前言
日志文件过大会占用服务器硬盘空间,导致服务无法正常运行,故文件过大时需转移至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
以上文本将每分钟执行一次脚本