伺服器系統運作一段時間後就會自動崩潰。究其原因發現,是系統存放日志的檔案夾已滿,導緻日志檔案夾所在系統分區無法正常工作,于是就有了這個日志清理腳本。
日志産生目錄 在系統日志産生時,存放在/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