自己写的一个用scp备份站点的脚本:
错误日志写到 /var/log/test_err/err.log 中。
备份的日志写在/var/log/www_back/`date +%Y-%m-%d`.log 中。

过程就是:先根据条件判断是否需要备份,然后判断备份的文件是否已经有了。接着进行本地压缩。没有成功有邮件提醒报警(可以用手机邮箱直接短信提醒)。
ps:测试过程中,出现问题,报警,手机直接就是五十几条短息。0.o,说多了都是泪啊~


之后就是scp备份了。用一个循环。




代码:

[root@redhat script]# cat my_back.sh 
#!/bin/bash
#backup web station
exec 2>>/var/log/test_err/err.log


user=136XXXXXXXX@wo.cn
myDir="/myback"
sourDir="/usr/local/apache2/htdocs"
my_tar=".tar.gz"
log=/var/log/www_back/`date +%Y-%m-%d`.log
count=`ls -F $sourDir |grep "/$" |wc -l`
month=`date +%m`
day=`date +%d`
year=`date +%Y`
hour=`date +%H`
min=`date +%M`
dirname=$year-$month-$day

#创建本地备份目录
        if [ ! -d "$myDir" ]; then
                mkdir "$myDir"
        fi
cd $myDir
#创建时间目录
        if [ ! -d "$dirname" ]; then
                mkdir $dirname
        fi

#判断是否备份完毕。
my_time=`ls -F $dirname |wc -l`
        if [ "$my_time" -lt "$count" ]; then

#                  ---------------------------------------------------------------------
        cd $myDir/$dirname
        
        for my_web in `ls -l  $sourDir| sed -n '/^d/p'| awk '{print $8}'`
        do
#判断文件是否之前已经备份---------------------------------------------------------------

                web_tar=${my_web}${my_tar}
                echo $web_tar
                if [ ! -f "$web_tar"  ]; then
                    echo $my_web
                    echo "###################################################" >>$log
                    echo "  $dirname-$hour-$min backup  $my_web  starting ..." >>$log
                    cd $sourDir
                    tar -zcvf $myDir/$dirname/$my_web.tar.gz  ./$my_web
#失败发邮件-----------------------------------------------------------------------------
                        if [ $? -eq 0 ];then
                            echo "  $dirname-$hour-$min backup  $my_web ok  !!! " >>$log
                        else
                            echo "  $dirname-$hour-$min backup  $my_web false !!!" >>$log
                            echo "the $my_web  backup is down" | mail -s "backup for jesn" $user;
                        fi
                        cd $myDir/$dirname 
                else
                     echo  " $dirname-$hour-$min backup $my_web alexit !!!" >> $log


                fi
        done
        else 
        echo " $dirname-$hour-$min not any file to  backup  !!!" >> $log
        fi
#####开始scp

        tran=`ls -l $myDir/$dirname | awk '{print $8}'`
        for  i  in $tran
        do
        echo "######################START  SCP###########################">>$log
        time  scp -r  $myDir/$dirname/$i root@192.168.10.7:/backup
        if [ $? -eq 0 ];then
                            echo "  $dirname-$hour-$min SCP { $i } translation  ok  !!! " >>$log
                           # echo "translation  over !!!"  | mail -s "backup for jesn" $user;
                        else
                            echo "  $dirname-$hour-$min SCP { $i } translation false !!!" >>$log
                            #echo " SCP $i translation  down !!!" | mail -s "backup for jesn" $user;
         fi
        done
exit 0




邮件提醒,很简单的。
# vim /etc/mail.rc
setfrom=demo@126.com smtp=smtp.126.com
setsmtp-auth-user=demo smtp-auth-password=*** smtp-auth=login

然后重启你的 sendmail服务。
/etc/init.d/sendmail restart



那么一切就ok了。