天天看点

日志清理

服务器系统运行一段时间后就会自动崩溃。究其原因发现,是系统存放日志的文件夹已满,导致日志文件夹所在系统分区无法正常工作,于是就有了这个日志清理脚本。

日志产生目录 在系统日志产生时,存放在/var/log/下。

日记备份目录 将日志备份到/mnt/storage/log/中

备份目录最大容量 备份目录最大容量,如500mb。在超过此值时,程序将不断的将最旧的日志备份删除。

白名单 系统重要日志白名单。有些日志不太重要我门不需要备份。

#!/bin/bash
#
#最大日志容量
alarmrate=500
#the max size file can reach
file_max_size=5
#日志生成目录
log_ram_dir=/var/log
#日志备份目录
working_dir=/mnt/storage/log
#定时备份间隔5s
SLEEPTIME=5
#给文件名打时间戳
filenameConvert()
{
timestamp=$(date +%Y%m%d%H%M%S)
timestamp=`echo $timestamp`
RETVAL=$1.$timestamp
}
#搜索最旧的日志文件
searchdir()
{
oldestlog=`ls -rt | head -n 1 | awk '{print $1}'`
}
#删除工作目录下的旧日志
clear_old_log_under_working_dir()
{
cd $working_dir
while true;
do
logsize=`du -ms $working_dir | awk '{print $1}'`
if [ $logsize -gt $alarmrate ];
then
searchdir
rm -rf $oldestlog
else
break;
fi 
done
}
#this is main process of our log backup activity.
#日志备份函数,主要备份白名单中的日志文件。
backuplog_process()
{
cd $log_ram_dir
for i in * ;
do
file_size=`du -m $i | awk '{print $1}'`
case $i in
access.log | error.log | apcupsd.events | evms-engine.log| \
messages | kern.log | lpr.log | mail.err | \
mail.info | main.log | mail.warn | news | \
rsyncd.log | user.log | dmesg | dmesg.0 | dmesg.new)
if [ ! -d $working_dir ];then
mkdir -p $working_dir
fi
if [ file_size -gz file_max_size ];then
filenameConvert $i
cp $log_ram_dir/$i $working_dir/$RETVAL
echo "" > $log_ram_dir/$i
clear_old_log_under_working_dir
fi
;;
*)
if [ file_size -gz file_max_size ];then
echo "" > $log_ram_dir/$i
fi
esac
done
}

while true ;
do
backuplog_process
sleep $SLEEPTIME
done      
[root@Centos shell]# chmod +x cleanLog.sh 
[root@Centos shell]# crontab -e
*/1 * * * * /opt/bin/cleanLog.sh