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