免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yezhulin1982
打印 上一主题 下一主题

关于rsync排除备份目录的疑问? [复制链接]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
31 [报告]
发表于 2008-09-10 18:47 |只看该作者

回复 #30 likuku 的帖子

它们是两个不同的工具吧。

论坛徽章:
0
32 [报告]
发表于 2008-09-10 20:10 |只看该作者
原帖由 likuku 于 2008-9-10 18:41 发表
我之前也有类似需求,需要在自己的笔记本和办公室的 桌机之间保持一个 一致的变动频繁的目录。

开始使用 rsync 来作,很容易就乱掉。

现在改用 svn,所有问题直接解决干净。 (弄一个 svn-server,办公室的 ...



你这个需求有很多软件可以实现。。。
哈哈

论坛徽章:
0
33 [报告]
发表于 2008-09-10 21:58 |只看该作者
svn,等哪天有时间再祥细了解一下

论坛徽章:
0
34 [报告]
发表于 2008-09-11 10:06 |只看该作者
我是用脚本实现的,功能是将一个主服务器站点目录下的指定文件或目录同步到本地备份服务器,不知道是否可以帮助你

脚本如下:
1、rsync.sh

#!/bin/sh

PRO_PATH=/etc/rsyncscripts                    #修改为实际该脚本存在的路径

function var_test() {
    if [[ $1 != "" ]];
    then
        VAR=`echo $1 | awk '{print substr($1,1,3)}'`
        if [[ $VAR == "-c=" ]];
        then
            return
        fi
    fi
    echo "parameters error!"
    use_method
}

function use_method() {
    echo "usagePRO_PATH/rsync.sh -c=<file>"
    exit 0
}

function conffile_exist() {
    if [ -f "$PRO_PATH/rsync.conf" ];
    then
        if [ -f "$PRO_PATH/rsync.pro" ];
        then
            VAR=`echo $1 | awk -F = '{print $2}'`
            if [ -f $PRO_PATH/$VAR ];
            then
                return
            fi
        fi
    fi
    echo "$PRO_PATH/config file not exist!"
    echo "$PRO_PATH/rsync.conf must need!"
    echo "$PRO_PATH/rsync.pro must need!"
    exit 0
}

function rsync_error() {
    NO=0
    while read LINE
    do
        NO=$[NO+1]
        VAR=`echo $LINE | awk '{print match($1,"="}'`
        if [[ $VAR == 0 ]];
        then
            echo "$PRO_PATH/rsync.conf format error at line "$NO
            exit 0
        fi
    done < $PRO_PATH/rsync.conf
    return
}

function file_match() {
    FLAG=0
    VAR=`echo $1 | awk -F = '{print $2}'`
    FILE_M=`echo $VAR | awk -F . '{print $1}'`
    while read LINE
    do
        RSYNC_M=`echo $LINE | awk -F = '{print $1}'`
        if [[ $FILE_M"_destpath" == $RSYNC_M ]];
        then
            FLAG=$[FLAG+1]
        fi
        if [[ $FILE_M"_sourpath" == $RSYNC_M ]];
        then
            FLAG=$[FLAG+1]
        fi
        if [[ $FILE_M"_server" == $RSYNC_M ]];
        then
            FLAG=$[FLAG+1]
        fi
    done < $PRO_PATH/rsync.conf
    if [[ $FLAG == 3 ]];
    then
        return
    fi
    echo "$PRO_PATH/rsync.conf and $PRO_PATH/$VAR match error!"
    exit 0
}


CONFFILE=$1

var_test $CONFFILE
conffile_exist $CONFFILE
rsync_error $CONFFILE
file_match $CONFFILE

read COMMAND < $PRO_PATH/rsync.pro
VAR=`echo $CONFFILE | awk -F = '{print $2}'`
FILE_M=`echo $VAR | awk -F . '{print $1}'`
while read LINE
do
    RSYNC_M=`echo $LINE | awk -F = '{print $1}'`
    if [[ $FILE_M"_destpath" == $RSYNC_M ]];
    then
        DESTPATH=`echo $LINE | awk -F = '{print $2}'`
    fi
    if [[ $FILE_M"_sourpath" == $RSYNC_M ]];
    then
        SOURPATH=`echo $LINE | awk -F = '{print $2}'`
    fi
    if [[ $FILE_M"_server" == $RSYNC_M ]];
    then
        SERVER=`echo $LINE | awk -F = '{print $2}'`
    fi
done < $PRO_PATH/rsync.conf

FILENAME=`echo $CONFFILE | awk -F = '{print $2}'`
while read LINE
do
    if [[ $LINE != "" ]];
    then
        VAR=`echo $LINE | awk '{print substr($1,1,1)}'`
        if [[ $VAR != "#" ]];
        then
            echo $COMMAND $SERVER:DESTPATH$LINE $SOURPATH
            $COMMAND $SERVER:DESTPATH$LINE $SOURPATH
        fi
    fi
done < $PRO_PATH/$FILENAME


2、rsync.pro
rsync -aWzv --delete --progress

3、rsync.conf
etpass_server=172.16.1.55                #修改为实际你的服务器地址
etpass_destpath=etpass/                        #修改为实际你的服务器里的目的标记,就是rsyncd.conf中指定的
etpass_sourpath=/var/www/etpass/        #修改为你的要拷贝到的本地路径
=                                        #如果有多个配置,用=分开
cnetpass_server=172.16.1.55
cnetpass_destpath=cnetpass/
cnetpass_sourpath=/var/www/cnetpass/

#_server、_destpath、_sourpath之前的是文件和目录列表配置文件的.conf之前的部分

#比如我的文件和目录列表内容文件是etpass.conf和cnetpass.conf,那么在这里就要像以上那么写,注意etpass.conf和etpass_server、etpass_destpath、etpass_sourpath以及cnetpass.conf和cnetpass_server、cnetpass_destpath、cnetpass_sourpath的关系

#然后在创建.conf文件,里面是要拷贝的文件(路径是在服务器端配置文件中设定的,如etpass_destpath=etpass/),不要拷贝的文件可以不列在里面,或用#注释掉

#注意所有文件必须位于在rsync.sh中的路径指定的位置的同一目录

4、etpass.conf

app
#bbs                #不需要同步的东西,用#注释掉,也可以不在该文件里给出
#cache
conf
#data
#etpass_bbs
#etpass_gift
fully_install.sh
home
hotel_comment.html
index.html
install_php
#log
templates
templates_c
tools
var
webroot

5、cnetpass.conf

app
templates
templates_c
webroot

6、附上服务器端配置文件rsyncd.conf

read only = yes
list = yes
uid = nobody
gid = nogroup
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
[etpass]
path = /var/www/etpass
[cnetpass]
path = /var/www/cnetpass

7、可以用/etc/init.d/rsync脚本启动或关闭rsync服务,以上内容在debian 4下测试通过,目前在线上使用中

8、使用方式:实际路径/rsync.sh -c=<file>   <file>是内容列表文件,如以上的etpass.conf或cnetpass.conf(注意不能带路径)
如:
/etc/rsyncscripts/rsync.sh -c=etpass.conf
/etc/rsyncscripts/rsync.sh -c=cnetpass.conf

论坛徽章:
0
35 [报告]
发表于 2008-09-11 10:48 |只看该作者
感谢楼上这位朋友分享劳动成果。

论坛徽章:
0
36 [报告]
发表于 2008-09-11 14:38 |只看该作者
原帖由 yezhulin1982 于 2008-9-10 08:21 发表
原帖由 blackold 于 2008-9-9 16:03 发表
try:
rsync -urvvv --progress --exclude-from=/tools/ /misc/usb/ /mnt/de/docs/

后来经过不断测试,blacko ...

exclude的参数,基本上是相对于source目录的相对路径,或者pattern

论坛徽章:
0
37 [报告]
发表于 2008-09-11 14:46 |只看该作者
原帖由 yezhulin1982 于 2008-9-10 08:35 发表
每次执行完rsync之后,在最后就会出现以下的信息:
_exit_cleanup(code=0, file=main.c, line=977): about to call exit(0)
请教各位是不是正常情况。

-v太多了

论坛徽章:
0
38 [报告]
发表于 2008-09-11 15:54 |只看该作者
原帖由 bao_m 于 2008-9-11 10:06 发表
我是用脚本实现的,功能是将一个主服务器站点目录下的指定文件或目录同步到本地备份服务器,不知道是否可以帮助你

脚本如下:
1、rsync.sh

#!/bin/sh

PRO_PATH=/etc/rsyncscripts                    ...

这个比较牛,这么长的脚本,不过好像太复杂了,我想没必要这么复杂吧。

论坛徽章:
0
39 [报告]
发表于 2008-09-11 21:17 |只看该作者
原帖由 blackold 于 2008-9-10 18:47 发表
它们是两个不同的工具吧。


当然是不同工具,但svn更适合解决楼主的问题。

论坛徽章:
0
40 [报告]
发表于 2008-09-11 21:19 |只看该作者
既然有 svn ,就没必要自己花大力气去用 rsync 来实现一个类 svn 的蹩脚工具。

svn 很好学好用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP