一个可自动备份及清理系统日志的Shell脚本

来源:互联网 发布:2017淘宝店铺注销 编辑:程序博客网 时间:2024/06/10 21:30

由于是个人电脑,每天都要不定时的开关机~所以,就不使用cron了~
这个脚本默认在每个月的最后一天或者/var/log/目录大小超过100MB时执行备份及清理日志~
(可根据自己的实际情况放在~/.bashrc或~/.bash_profile文件中执行,也可以放在开关机服务中运行,但由于此时的$HOME为空,所以日志会备份到/BackupLog/目录下)
补充一点:由于此脚本要对/var/log/目录下的所有目录及文件进行读写操作,所以要正常运行此脚本需要root权限。非root用户可以使用sudo。


#!/bin/sh
function backup_log() {
printf "/nBackuping System Log ... ..."
Year=`date +%Y`
Month=`date +%m`
mkdir -p $HOME/BackupLog/$Year/$Month
DEST=$HOME/BackupLog/$Year/$Month/`date +%Y%m%d_%H%M%S`.tar.gz
tar zcf $DEST /var/log/ 2> /dev/null
}

function check_dir() {
dir=`ls -l $1 | grep "^d" | grep -v 'lost+found$' | gawk '{print $NF}' | sed -e :x -e 'N;s//n/ /g;tx'`

for DIR in $dir
do
clear "$1$DIR/"
check_dir "$1$DIR/"
done
}

function clear() {
old=`ls -l $1 |grep '/.old$' | gawk '{print $NF}'`
if [ ! -z "$old" ] ; then
rm -f $1*.old
fi
link=(`ls -l $1 | grep "^-" | gawk '{print $NF}' | sed -e :a -e 'N;s//n/ /;ta'`)
for log in ${link[*]}
do
sed 's/.*//' $1$log > $1$log
done
}

function clean_log() {
printf "/nCleaning System Log ... .../n"
clear $1
check_dir $1
}

tomorrow=`date +%e -d tomorrow`
space=`du -s /var/log/ | gawk '{print $1}'`
if (( $tomorrow == 1 && $space > 5120 )) || [ $space -gt 102400 ] ; then
amount=`echo $space | gawk '{printf "%.2f",$1/1024}'`
printf ""The /var/log/ directory uses $amount MB disk space./nDo you want to archive the system log? [y/n] "
read -n 1 input
case $input in
y | Y)
backup_log
;;
esac
clean_log "/var/log/"
fi

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sqlove/archive/2009/12/01/4906943.aspx