rsync在windows上的安装和使用二

文:铁乐与猫
2017-9-29

前情提要:
环境:windows7、rsync客户端安装在E:\soft\cwRsync_5.5.0_x86_Free\

书接前文,前面说到我们在windows上安装(其实是免安装,解压就可用)了rysnc的windows客户端。
但是还没有说到将rysnc这命令加入到windows环境变量中,这样就不用每次使用绝对路径来使用rysnc了。
特别是要写脚本和计划任务自动设置到时同步的时候,加入环境变量简直不能太省事了。

右键“我的电脑(计算机)”-“属性”-“高级系统设置”;
弹出“系统属性”框,再点击“高级”标签-“环境变量”;
弹出“环境变量”框,选中下方的系统变量一栏中的“Path”,再点击“编辑”进行编辑系统变量,如图:

Path的变量值一栏结尾,我们要续上cwRsync的绝对路径进去,注意的是前面要替上一个变量值添加上分号区分,自己是最后一个就不用加分号了,如图:

相当于是填入”;E:\soft\cwRsync_5.5.0_x86_Free\bin”,确定。

运行cmd,在E:\soft\cwRsync_5.5.0_x86_Free\bin以外的目录下操作敲入rysnc的命令验证变量生效:

例如上图,直接在C盘的路径下输入rsync –version命令,也能正常给出rsync的版本信息,表示环境变量已设置生效。

这里再加强一下cmd窗口下rysnc命令中要指向windows的各个盘符目录是怎么做的,例如:

rsync -avz /cygdrive/e/python apache@172.16.0.111::www –password-file=/etc/rysnc_pwd.txt

注意:上述命令行中的/cygdrive/e/表示windows系统的E盘,

/etc/rysnc_pwd.txt表示E:\soft\cwRsync_5.5.0_x86_Free\etc下的rysnc_pwd.txt文件。

我们可以通过windows自带的任务计划,让系统自行进行同步。尽管这个和服务器还是有一定的时间差的,但是有总比没有好。
实际上要满足实际需求做到实时同步还应使用inotifywait(虽然不像linux那样支持inotify,但github上有人开发出windows上适用的inotifywait了)
又或者使用cygwin环境再实行安装inotify会更适宜初学者去做实时同步。

先说说计划任务:
我们可以把上述命令,写到一个批处理文件中,然后在任务计划中进行配置。
新建rsync_inetpub.bat文件中写入一行:
rsync -avz /cygdrive/e/inetpub apache@172.16.0.111::www –password-file=/etc/rsync_pwd.txt
保存,例如保存在e盘下。
打开任务计划程序,创建任务,设置好计划任务,触发器是每天的凌晨3点半,操作是运行e盘上的批处理脚本rsync_inetpub.bat。

如果需要做到近似于实时同步,那就是可以将计划任务相隔时间设置成一分钟,而不是特定某一时刻了。

回过头来先说说windows安装cwRsync的server版本,毕竟网上还是能找到4.1的免费版本,可以先做一下测试,
最后再来测试cygwin的环境下rsync与inotify的运用。

另外说个题外话,其实如果是windows与windows之间的同步,还有一个方便的软件可选,那就是Allway sync。
它里面也有策略支持文件发生改动时同步,也有监视文件变化,也可以同步复制NTFS的权限、筛选出不需要同步的文件列表等。
如果在同步的文件数量不是特别大和多的情况下,感觉选择Allway sync易用性和操作性会更适合。

回过头来继续说安装cwRsyncServer4.1,选择安装路径的时候可以自定义一下,例如选择放E:\cwSyncServer。
默认是C:\program Flies\ICW。自定义一下会比较易操作一些。

修正:建议按默认路径安装,因为我第一次安装时服务和用户建立都失败了,当然也有可能与安装包有关系?

接下来会需要在系统上建立一个用户以便用于Rsync服务:

默认名字是SvcCWRSYNC,密码也随机给出了,不过都是可以修改的。
为了便于记忆,我改成Rsync用户,密码也重新修改了一下:B1DbCb70Ed9bc6B1。
点击Install,开始安装。

完成安装后的初始目录文件如上图。

虽然安装完成了,但发现服务没有出现在控制面板-管理工具-服务项里,而Rsync用户更是没有创建。
所以又卸载后换了个安装包来重装。
然后安装的时候默认装回C盘,用户保持默认的SvcCWRSYNC,密码倒是改成了ABCabc123。

这次的安装终于是成功了,所以补上建议默认安装路径和用户就不用更改了,放置在C盘估计也是没办法的。

上图是系统新建了一个SvcCWRSYNC用户,属于User组。

上图是系统新增了一个RsyncServer服务,执行文件为于C:\Program Files (x86)\ICW\bin\cygrunsrv.exe
启动类型为手动,可以考虑设置成自动了,随开机启动。

rsyncserver安装完毕后,主要的用户和服务都自动弄好了之后所要做的和在Linux下rsync服务配置没有多大的区别了。
首先就是对rsyncserver进行编辑配置文件来达到自己想要的效果,这个配置文件在安装的时候也已经生成在安装目录下了,就是rsycnd.conf文件。
建议使用NotePad++之类的软件打开进行编辑。

默认的rsyncd.conf中有的配置很少,不过也能从中看出在CwRsync命令里是用”/cygdirve/c”这类的方式表示windows中的”c:\”路径。

编辑rsyncd.conf,这里模拟要同步的是d盘的www(网站目录)做以下设置:
(主要是增加[www]模块)

[www]
path = /cygdrive/d/www
read only = false
ignore errors
hosts allow = 172.16.0.0/255.255.252.0
auth users = apache
secrets file = /rsyncd_pwd.txt

编辑完成后,要创建好www目录和secrets file(也就是/rsyncd_pwd.txt),并且要对这些目录文件设置SvcCwRSYNC用户有完全控制权限。

rsyncd_pwd.txt这个存放认证用户和密码的文件我直接放cwRsync的安装目录下(也就是/目录),
SvcCWRSYNC权限是不用再添加了,本来就有。
先要编辑一下,将apache:ABCabc123这类的认证信息填入进去:apache:ABCabc123
保存后,打开cmd,使用chmod命令设置rsyncd_pwd.txt权限为600

cmd能识别到chmod命令是因为安装cwRsync的同时也安装了cygwin环境。
但是要想方便直接使用命令还得先去设置好环境变量。这个第一篇里已有提到就不再复述了。

chmod路径的时候要换成linux的思路去打
这里举了两个例子,一个是在cwRsync根目录下的就直接/,另一个在e:\的就打/cygdrive/d。
另外虽然是设置了600,但ls去看的时候并不算是600.且看测试的时候有没有报错吧。

开linux的客户端进行测试。windows服务端ip为172.16.2.40,linux客户端ip为172.16.0.145。
首先telnet 172.16.2.40 873

telnet测试通,但真正同步连接时报错
[yunwei@localhost ~]$ rsync -avz /www apache@172.16.2.40::www
Password:
@ERROR: invalid uid nobody
rsync error: error starting client-server protocol (code 5) at main.c(1516) [sender=3.0.9]

出现这个错误显然与uid有关,我之前配置的rsyncd.conf在全局配置那里忘了加上以下两行配置了:
uid = 0
gid = 0

加上去就可以防止这种认证错误了,除非说要求比较严格的linux同步到linux,然后需要两个系统中都存在有同样的uid、gid用户来进行同步那种。

再来进行尝试,和copy文件一样,前者同步到后者:

要注意的是,双冒号不要打成只有一个冒号了,如果用ssh的方式传送,因为windows没有开ssh22端口,就会失败。
如下图:

windows Rsync客户端与 windows cwRsync服务端 同步连接也是同样的使用873端口连接就可以了。这里就不再复述了。
试验成功,接下来的第三篇文章是尝试直接在cygwin的环境下操作!

end

发表评论

电子邮件地址不会被公开。 必填项已用*标注