您的位置:首页 > 运维架构 > Shell

LINUX SHELL 自动备份数据脚本

2012-03-31 17:32 471 查看
目的:实现定时自动备份文件夹,并排除某些文件夹,写下日志,并自动清除过期的备份和日志。

主要有3个文件,自动备份和清除脚本文件,需要备份的文件夹列表文件,需要排除的文件夹列表文件,都放在/root/backup文件夹下面,备份的目标文件夹为/home/backup/192.168.0.8,所以要设定排除掉/home/backup这个文件夹,否则不知道会发生什么后果。

自动备份和清除脚本文件backup_tar_gz.sh内容如下:

#author: bill

#date: 2012-03-27

####################################################

DATE=`date +"%Y%m%d%H%M%S"`

ProjectLst=/root/backup/backup_project.lst

ExcludeLst=/root/backup/backup_exclude.lst

if [ ! -f $ProjectLst ]

then

echo "$ProjectLst is not exist."

exit 1

fi

AllDir=/home/backup/192.168.0.8

mkdir $AllDir/$DATE

BakDir=$AllDir/$DATE

LogFile=$AllDir/log/$DATE.log

#备份保留天数

RetainDay=3

##################################################

echo "backup start at $(date +"%Y-%m-%d %H:%M:%S")" > $LogFile

echo "--------------------------------------------------" >> $LogFile

cd $BakDir

PROJECTLIST=`cat $ProjectLst`

#backup projectlist

for Project in $PROJECTLIST

do

ProjectData=$Project

DestDir=$BakDir$Project

#echo $DestDir

#echo $ProjectData

mkdir -p ${DestDir%/*}

tar cvzpPf $DestDir.tar.gz $ProjectData -X $ExcludeLst > /dev/null

if [ $? -eq 0 ];then

echo "backup $Project done into $DestDir.tar.gz ">>$LogFile

else

echo "backup $Project fail into $DestDir.tar.gz ">>$LogFile

fi

done

echo "--------------------------------------------------" >> $LogFile

echo "backup end at $(date +"%Y-%m-%d %H:%M:%S")" >> $LogFile

echo " " >> $LogFile

#############################################################

#delete old backup file

echo "delete old backup start at $(date +"%Y-%m-%d %H:%M:%S")" >> $LogFile

echo "--------------------------------------------------" >> $LogFile

ExistBakDir=`ls $AllDir`

for BakDir in $ExistBakDir

do

DirDate=`echo $BakDir | awk '{print substr($1,1,8)}'`

#echo $DirDate

if [ `echo $DirDate | grep '[0-9]\{4\}[0-9]\{2\}[0-9]\{2\}'` ] && [ $DirDate -le $(date --date="$RetainDay days ago" +"%Y%m%d") ]

then

rm -rf $AllDir/$BakDir > /dev/null

echo "[$AllDir/$BakDir],Delete Old File Success!" >> $LogFile

fi

done

echo "--------------------------------------------------" >> $LogFile

echo "delete old backup end at $(date +"%Y-%m-%d %H:%M:%S")" >> $LogFile

echo " " >> $LogFile

#################################################################

#delete old logfile

echo "delete old log file start at $(date +"%Y-%m-%d %H:%M:%S")" >> $LogFile

echo "--------------------------------------------------" >> $LogFile

cd ${AllDir}/log

ExistLogFile=`ls ${AllDir}/log`

for EachLogFile in $ExistLogFile

do

FileDate=`echo $EachLogFile | awk '{print substr($1,1,8)}'`

#echo $FileDate

if [ `echo $FileDate | grep '[0-9]\{4\}[0-9]\{2\}[0-9]\{2\}'` ] && [ $FileDate -le $(date --date="$RetainDay days ago" +"%Y%m%d") ]

then

rm -rf $AllDir/log/$EachLogFile > /dev/null

echo "[$AllDir/log/$EachLogFile],Delete Old Log File Success!" >> $LogFile

fi

done

echo "--------------------------------------------------" >> $LogFile

echo "delete old log file end at $(date +"%Y-%m-%d %H:%M:%S")" >> $LogFile

echo " " >> $LogFile

exit 0

需要备份的文件夹列表文件backup_project.lst内容如下:

/bin

/boot

/etc

/home

/lib

/lib64

/opt

/root

/sbin

/usr

/var

需要排除的文件夹列表文件backup_exclude.lst

内容如下:

/home/backup

定时任务设置如下:

0 21 * * * /root/bakcup/backup_tar_gz.sh

本文出自 “我爱CTO” 博客,请务必保留此出处http://tanjunjie.blog.51cto.com/6988/822503
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: