#!/bin/bash
## 按文件大小切割日志文件
## 注:实际测试中发现,对log文件进行切割后,rsyslogd短时间内会继续往mv后的文件写日志
## 文件日志所在的目录
LOG_PATH=/opt/logs/router-log
## 日志文件超过多少字节后,进行切割,最多进行100份切割,超过后,按时间为后缀
## 100M : 104857600
## 500M : 524288000
## 1G : 1073741824
LOG_MAX_SIZE=5240
currentDate1=`date "+%Y%m%d_%H%M"`
currentLogDate=`date "+%Y-%m-%d"`
echo "start log_rotate.sh $currentDate1"
echo "LOG_PATH:$LOG_PATH"
echo "LOG_MAX_SIZE:$LOG_MAX_SIZE"
sendHUP=0
for name in $LOG_PATH/*
do
if [ -f "$name" ]; then
if [ "${name##*.}" == "log" ]; then
filesize=$(stat -c '%s' $name)
if [[ $filesize -ge $LOG_MAX_SIZE ]]; then
rotating=0
for((i=1;i<=100;i++))
do
if [ ! -f "$name.$i" ]; then
echo "mv $name $name.$i"
mv $name $name.$i
rotating=1
sendHUP=1
break
fi
done
if [ $rotating -eq 0 ]; then
currentDate=`date "+%Y%m%d_%H%M"`
mv $name $name.$currentDate
sendHUP=1
fi
fi
fi
fi
if [ -d "$name" ]; then
if [ -d "$name/$currentLogDate" ]; then
for name2 in $name/$currentLogDate/*
do
if [ -f "$name2" ]; then
if [ "${name2##*.}" == "log" ]; then
filesize=$(stat -c '%s' $name2)
if [[ $filesize -ge $LOG_MAX_SIZE ]]; then
rotating=0
for((i=1;i<=100;i++))
do
if [ ! -f "$name2.$i" ]; then
echo "mv $name2 $name2.$i"
mv $name2 $name2.$i
rotating=1
sendHUP=1
break
fi
done
if [ $rotating -eq 0 ]; then
currentDate=`date "+%Y%m%d_%H%M"`
mv $name2 $name2.$currentDate
sendHUP=1
fi
fi
fi
fi
done
fi
fi
done
if [ $sendHUP -eq 1 ]; then
echo "send HUP to rsyslogd.pid:$(cat /var/run/syslogd.pid)"
kill -HUP $(cat /var/run/syslogd.pid)
else
echo "not send HUP"
fi
0 条评论。