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

由于是个人电脑,每天都要不定时的开关机~所以,就不使用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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值