本文介绍了linux下使用rsync同步两个机器目录一个方向的问题。与rsync同步后可以保持目录的一致性(包括删除操作)。数据同步方式1、从主机拉取数据,在备机启动进程同步命令:rsync-avzP--deleteroot@{remoteHost}:{remoteDir}{localDir}参数说明:-a参数,相当于-rlptgoD(-r为Recursion-l为链接文件,表示复制链接文件;-p表示保留文件原有权限;-t保留文件原有时间;-g保留原有用户组文件的所有者;-o保留文件的原始所有者;-D相当于块设备文件);-z传输时压缩;-P传输进度;-v传输进度等信息;示例:rsync-avzP--deleteroot@192.168.1.100:/tmp/rtest1/tmp/2,将数据主机上启动的进程同步命令推送到备机:rsync-avzP--delete{localDir}root@{remoteHost}:{remoteDir}例子:rsync-avzP--delete/tmp/rtest1root@192.168.1.101:/tmp/autosync_config描述了不输入密码配置同步的方法。1、使用sshkey这种方式可以直接使用rsync命令进行同步,同步过程中不需要输入密码。在宿主机上生成sshkey:ssh-keygen-trsa在备机上添加pubkeyssh-copy-id-i~/.ssh/id_rsa.pubroot@192.168.1.101或者手动添加:在宿主机上执行如下命令即可获取pubkey:cat~/.ssh/id_rsa.pub在备机上添加key内容:vi~/.ssh/authorized_keys使用pexpect自动输入密码。示例代码如下:*#!/usr/bin/envpython#--coding:utf-8-*-importpexpectimporttimeimporttracebackdefdoRsync(user,passwd,ip,srcDir,dstDir,timeout=3600):cmd="rsync-azPq--delete{srcDir}{rUser}@{rHost}:{dstDir}".format(rUser=user,rHost=ip,srcDir=srcDir,dstDir=dstDir)try:ssh=pexpect.spawn(cmd,timeout=timeout)printcmdi=ssh.expect(['password:','continueconnecting(yes/no)?'],timeout=5)ifi==0:ssh.sendline(passwd)elifi==1:ssh。发送线('是')ssh。expect('password:')ssh.sendline(passwd)ssh.read()ssh.close()除了:#printtraceback.format_exc()passifname=='main':doRsync("root","123456","192.168.1.101","/tmp/rtest1","/tmp")以上是使用python实现的代码,大家可以根据情况用其他语言实现这个功能。其他1.rsync在执行过程中被kill了怎么办;杀死rsync进程并再次运行整个过程是安全的;它会从停止的地方继续。它可能有点低效,特别是如果你没有通过--partial(包含在-P中),因为rsync将再次检查所有文件并从头开始处理它被中断的文件。**rsync是安全的被杀死,下次启动时仍能正常工作。2、rsync不能指定时间段;1)站长博客问题可以通过kill来解决2)或者使用pexpect的timeout参数来控制3)可以先通过find搜索筛选出文件夹名称,然后用rsync同步这个就可以携带了根据现有业务的特点,例如:
