日誌清理

服務器系統運行一段時間後就會自動崩潰。究其原因發現,是系統存放日誌的文件夾已滿,導致日誌文件夾所在系統分區無法正常工作,於是就有了這個日誌清理腳本。

日誌產生目錄 在系統日誌產生時,存放在/var/log/下。

日記備份目錄 將日誌備份到/mnt/storage/log/中

備份目錄最大容量 備份目錄最大容量,如500mb。在超過此值時,程序將不斷的將最舊的日誌備份刪除。

白名單 系統重要日誌白名單。有些日誌不太重要我門不需要備份。

日誌文件名格式 新日誌以.log結尾。將白名單中重要日誌加上時間戳,如mail.log.20171018153059

腳本行爲 腳本每隔10s掃描/var/log下新日誌的大小。如果發現有大小超過5mb的日誌,如果是白名單中的日誌,則會將其備份到備份目錄中,原日誌刪除;如果發現其不再日誌備份目錄中,則直接刪除。然後,檢查是否超過了備份目錄中的最大容量,如果超過,則將最老的日誌備份刪除。

#!/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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章