linux自动打包脚本解析,Linux自动备份脚本--解析

由于上次做项目的时候,客户要求需要对系统状态做自动备份,当时觉得自己写得脚本实在是不够上档次,就开始在网上搜索各种比较好的脚本,现在找到了一个还挺不错的脚本,与大家一起来解析分享一下。其实我第一遍看的时候中间有一小部分没有弄懂,觉得里面的语法真的是用的恰到好处,不过还是稍稍修改了一点。#说明使用的是bash语法来写脚本

#!/bin/bash

#设置日志文件,前提建好了/backup/log目录

LogFile=/backup/log/`date +"%Y-%m"`.log

#备份源目录,这时我们可以写成是“根目录”,因为系统状态一定是保存在根目录下的。

#从网上查资料得知,一般备份系统状态都会备份/etc,/var,/root,/home,/opt,其他的目录都是与系统状态不大重要的

SourceDir=/

#备份目标

BakDir=/backup

#保存20天过期自动删除

RetainDay=20

#备份的内容可以写进project.lst,project.lst填写备份目录,下面是备份的

#具体脚本,其核心是tar打包,并把重要的内容记录到日志文件里

ProjectLst=/backup/project.lst

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

DATE=`date +"%Y-%m-%d"`

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

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

cd $BakDir

PROJECTLIST=`cat $ProjectLst`

#这个Project是个新变量,进入循环,依次为project中的目录,etc,var,home,root,opt

for Project in $PROJECTLIST

do

ProjectData=$SourceDir/$Project

DestDir=$BakDir/$Project

PackFile=$DATE.$Project.tgz

if [ -f $BakDir/$PackFile ]

then

echo "backup file have exist !" >>$LogFile

else

cp -af $ProjectData $DestDir >/dev/null

tar -zcvf $PackFile $Project >/dev/null

echo "backup $Project done into $PackFile" >>$LogFile

rm -rf $Project

fi

done

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

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

echo " " >> $LogFile

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

#下面的内容就是把刚才备份的内容传到服务器上,前提是你有一个可以访问到底FTP服务器

#put backup to ftp server

HOST=192.168.110.111

FTP_USERNAME=ftpuser

FTP_PASSWORD=123456

cd  $BakDir

echo "start open ftp serverat $(date +"%Y-%m-%d %H:%M:%S")" >> $LogFile

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

/usr/bin/ftp -in <

open $HOST

user $FTP_USERNAME $FTP_PASSWORD

put $DATE.$Project.tgz

bye

EOF

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

#最后上传完毕后再查看本地备份大于20天的自动删除,这样就可以实现本地异地双备份

find $Bakdir -type f -mtime +$RetainDay -name "*.$Project.tgz" -exec rm {} \; >/dev/null

exit 0

#最后我们还可用crontab做个周期性计划,比如每天一次全备份

#59 23 * *  *  /scripts/backup.sh

此处解释两个语法性的问题:

1.关于if [-f $1]

do

command

done

if 后接测试语句,[]中相当于test命令,-f 是检测后面所跟的变量是否存在

上面语句意为,如果在backup目录中,已经存在备份过的目录,就提示该目录已存在,就不会再备份。

2.find命令

-exec rm {} \;这是一种格式,方便find查找,-exec后跟要执行的命令,一对大括号,斜杠和分号

-mtime   是按照文件的更改时间来查找文件,

例如,find -mtime +n表示文件的更改时间距现在n天以前

-n 表示文件的更改时间距现在n天以内

-type   是查找某一类型的文件  f --普通文件  p--管道文件

l--链接文件   d --目录

b--块设备文件 c--字符设备文件

这句命令的意思是将备份大于20天的自动删除

3./dev/null

功能类似于回收站之类的目录,将命令产生的邮件信息放进去,不然各种信息会撑爆系统的,它会自动清除

以下是我操作自动备份的命令:[root@ZZSRV1 ~]# mkdir /scripts/

[root@ZZSRV1 ~]# cd /scripts/

[root@ZZSRV1 scripts]# ls

backup.sh

[root@ZZSRV1 scripts]# vi backup.sh

[root@ZZSRV1 scripts]# cat backup.sh

[root@ZZSRV1 scripts]# mkdir /backup

[root@ZZSRV1 scripts]# cd /backup

[root@ZZSRV1 backup]# touch project.lst

[root@ZZSRV1 backup]# vi project.lst

[root@ZZSRV1 backup]# cat project.lst

etc

var

home

root

opt

[root@ZZSRV1 backup]# mkdir log

[root@ZZSRV1 backup]# cd /scripts/

[root@ZZSRV1 scripts]# ls

backup.sh

[root@ZZSRV1 scripts]# sh backup.sh

[root@ZZSRV1 scripts]# cd /backup

[root@ZZSRV1 backup]# ll

total 34672

-rw-r--r-- 1 root root  6675038 Aug 20 14:19 2014-08-20.etc.tgz

-rw-r--r-- 1 root root      504 Aug 20 14:19 2014-08-20.home.tgz

-rw-r--r-- 1 root root      130 Aug 20 14:19 2014-08-20.opt.tgz

-rw-r--r-- 1 root root     2367 Aug 20 14:19 2014-08-20.root.tgz

-rw-r--r-- 1 root root 28809044 Aug 20 14:19 2014-08-20.var.tgz

drwxr-xr-x 2 root root       24 Aug 20 14:19 log

-rw-r--r-- 1 root root       23 Aug 20 14:25 project.lst

[root@ZZSRV1 log]# cat 2014-08.log

backup start at 2014-08-20 14:26:34

--------------------------------------------------

backup etc done into 2014-08-20.etc.tgz

backup home done into 2014-08-20.home.tgz

backup opt done into 2014-08-20.opt.tgz

backup root done into 2014-08-20.root.tgz

backup var done into 2014-08-20.var.tgz

[root@ZZSRV1 scripts]# crontab -e

59 23 * * * /scripts/backup.sh

由上可以证明这个备份脚本是正确的,不会有任何问题,大家也可以提出自己的建议给我,一起进步!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值