天天看点

日志清理

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

日志产生目录 在系统日志产生时,存放在/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,如需转载请自行联系原作者