LINUX系统运维技术交流群:4930609

脚本需求:

        对192.168.0.100中的/data/ftp_home/iread目录下的数据,
常态化保留3天原始数据,每天凌晨2点执行脚本,
当前的日期减去3后的日期对应的文件打包,
并rsync同步到192.168.0.111上去,传输成功后,删除压缩包。
(比如7月31日凌晨两点执行脚本,将7月28日的数据[即名称为1002.20120728*的文件] 压缩,并传输到31上去,传输成功,删除压缩包)。
至于删除源文件的时间节点,先开发成将源文件重命名,屏蔽,运行几天确认没有问题后,然后 再修改为自动删除。
 

#/bin/bash
#常态化保留3天原始数据,每天凌晨2点执行脚本并上传到备份服务器上

######需要备份的时间日期######
BAKDATE=`date +%m%d --date='-3 days'`

######需要备份文件的路径######
BAKFILEDIR="/data/ftp_home/iread/"

######查看三天前的文件######
######在我系统里输入ls -lrt 输出格式如下######
######-rw-r--r--. 1 root root 71881  7月 29 10:48 install.log######
######此处根据自己系统的类型来进行过滤awk -F月 '{ print $1$2,$3 }'的月因为我的系统显示的是中文的,######
######有的系统是“Jul”所以根据自己的系统进行调整最后显示出来格式是“月日 文件名称” 例如本系统“729 install.log”######
BAKFILE=`ls -lrt $BAKFILEDIR  |awk '{ print $6$7,$9}' |awk -F月 '{ print $1$2,$3 }'| grep $BAKDATE | awk {'print $2'}`

######备份文件名称#####
BAKNAME=`date +%Y%m%d --date='-3 days'`

######备份路径######
BAKDIR="/bak"

######判断备份路径是否存在如果不存在责创建该目录######
if [ ! -d "$BAKDIR" ]; then 
mkdir -p $BAKDIR
fi 

######复制备份文件到备份目录######
for i in $BAKFILE
do
cd $BAKFILEDIR
cp -rp $i $BAKDIR
done

######进入备份目录对备份文件打包######

cd $BAKDIR
tar cvf $BAKNAME.tar /bak/* &> /dev/null

######将备份文件打包的上传到备份的服务器上######
rsync -avzP $BAKEDATE.tar rsync://rsync@192.168.0.110:110/bak  &> /dev/null

######判断上面传输到其他服务器的备份文件是否上传成功,如果成功责删除本机备份文件,如不成功责不删除#####
if [ $? -eq 0 ]
then
echo "文件上传备份到服务器上已经成功请注意查收!" >> /var/log/bakftpname.log
rm -rf /bak
else
echo "文件上传备份到服务器上失败请检查网络是否正常!" >> /var/log/bakftpname.log
exit 1
fi
exit 0