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