天天看點

日志清理

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

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

日記備份目錄 将日志備份到/mnt/storage/log/中

備份目錄最大容量 備份目錄最大容量,如500mb。在超過此值時,程式将不斷的将最舊的日志備份删除。

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

日志檔案名格式 新日志以.log結尾。将白名單中重要日志加上時間戳,如mail.log.20171018153059

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

<code>#!/bin/bash</code>

<code>#</code>

<code>#最大日志容量</code>

<code>alarmrate=500</code>

<code>#the max size file can reach</code>

<code>file_max_size=5</code>

<code>#日志生成目錄</code>

<code>log_ram_dir=</code><code>/var/log</code>

<code>#日志備份目錄</code>

<code>working_dir=</code><code>/mnt/storage/log</code>

<code>#定時備份間隔5s</code>

<code>SLEEPTIME=5</code>

<code>#給檔案名打時間戳</code>

<code>filenameConvert()</code>

<code>{</code>

<code>timestamp=$(</code><code>date</code> <code>+%Y%m%d%H%M%S)</code>

<code>timestamp=`</code><code>echo</code> <code>$timestamp`</code>

<code>RETVAL=$1.$timestamp</code>

<code>}</code>

<code>#搜尋最舊的日志檔案</code>

<code>searchdir()</code>

<code>oldestlog=`</code><code>ls</code> <code>-rt | </code><code>head</code> <code>-n 1 | </code><code>awk</code> <code>'{print $1}'</code><code>`</code>

<code>#删除工作目錄下的舊日志</code>

<code>clear_old_log_under_working_dir()</code>

<code>cd</code> <code>$working_dir</code>

<code>while</code> <code>true</code><code>;</code>

<code>do</code>

<code>logsize=`</code><code>du</code> <code>-ms $working_dir | </code><code>awk</code> <code>'{print $1}'</code><code>`</code>

<code>if</code> <code>[ $logsize -gt $alarmrate ];</code>

<code>then</code>

<code>searchdir</code>

<code>rm</code> <code>-rf $oldestlog</code>

<code>else</code>

<code>break</code><code>;</code>

<code>fi</code> 

<code>done</code>

<code>#this is main process of our log backup activity.</code>

<code>#日志備份函數,主要備份白名單中的日志檔案。</code>

<code>backuplog_process()</code>

<code>cd</code> <code>$log_ram_dir</code>

<code>for</code> <code>i </code><code>in</code> <code>* ;</code>

<code>file_size=`</code><code>du</code> <code>-m $i | </code><code>awk</code> <code>'{print $1}'</code><code>`</code>

<code>case</code> <code>$i </code><code>in</code>

<code>access.log | error.log | apcupsd.events | evms-engine.log| \</code>

<code>messages | kern.log | </code><code>lpr</code><code>.log | mail.err | \</code>

<code>mail.info | main.log | mail.warn | news | \</code>

<code>rsyncd.log | user.log | dmesg | dmesg.0 | dmesg.new)</code>

<code>if</code> <code>[ ! -d $working_dir ];</code><code>then</code>

<code>mkdir</code> <code>-p $working_dir</code>

<code>fi</code>

<code>if</code> <code>[ file_size -gz file_max_size ];</code><code>then</code>

<code>filenameConvert $i</code>

<code>cp</code> <code>$log_ram_dir/$i $working_dir/$RETVAL</code>

<code>echo</code> <code>""</code> <code>&gt; $log_ram_dir/$i</code>

<code>clear_old_log_under_working_dir</code>

<code>;;</code>

<code>*)</code>

<code>esac</code>

<code>while</code> <code>true</code> <code>;</code>

<code>backuplog_process</code>

<code>sleep</code> <code>$SLEEPTIME</code>

<code>[root@Centos shell]</code><code># chmod +x cleanLog.sh </code>

<code>[root@Centos shell]</code><code># crontab -e</code>

<code>*</code><code>/1</code> <code>* * * * </code><code>/opt/bin/cleanLog</code><code>.sh</code>

本文轉自 SoulMio 51CTO部落格,原文連結:http://blog.51cto.com/bovin/1973786,如需轉載請自行聯系原作者