本文将在一台Linux服务器A上搭建rsync文件同步服务,而后在另外一台windows电脑B上保持与A的单向同步。html
某技术公司A的业务,会在服务器上生产pdf电子书、相册等文件,可是公司A自己不具有打印技术,须要转交给传统打印公司B来完成线下生产。那么问题来了,公司A怎么将天天生产出来几十个G的文件,以最小的成本传输给B呢?B公司是传统小企业,并不懂电脑技术,并且链接打印机的电脑是windows系统的.linux
一个天然而然想到的方案,就是借助第三方云盘服务C,公司A将文件上传C,而后公司B再从C上下载。这个方案可行,可是多了上传到传输节点C的步骤,增长了A上传C的这段时间成本。windows
一个简单的实施方案,就是在A上搭建rsync服务,而后告知B来同步。好在rsync提供的windows的版本,让这个方案可行。固然,该方案也适用于Mac/Linux,并且更简单。centos
以centos为例,安装rsync:安全
yum -y install rsync
直接启动rsync:服务器
rsync --daemon --config=/etc/rsyncd.conf
执行 ps -ef | grep rsync
能够看到服务已经成功启动.网络
安装rsync时默认生成了配置文件 /etc/rsyncd.conf
, 下面讲解一下配置文件. 完整的配置以下:tcp
uid = root gid = root use chroot = yes max connections = 4 pid file = /var/run/rsyncd.pid exclude = lost+found/ transfer logging = yes timeout = 900 ignore nonreadable = yes dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 [test01] path = /root/tmp/test01/ read only = yes [test02] path = /root/tmp/test02/ read only = yes
[test01]
一行以上的内容,与默认的配置无异,咱们采用默认的配置便可.测试
而后在文件的最后加上如下配置。表示咱们要启动两个提供同步的目录,分别命名为test01和test02,路径分别为/root/tmp/test01/
和 /root/tmp/test02/
.ui
这里的test01 和 test02 在文档中叫作 module name
,咱们能够理解为"别名"、"alias"的意思便可.
read only = yes 表示客户端只能下载服务端的文件而不能上传(单向同步).
这应该是大部分业务的需求,若是有上传须要,设置read only = no 便可.
有一点须要提醒, /etc/rsyncd.conf
配置修改后,并不须要重启服务便可生效.
若是想要关闭rsync服务,执行ps -ef | pgrep rsync | xargs kill
便可.
为了方便测试,咱们还须要建立/root/tmp/test01/ 和 /root/tmp/test02/ 两个目录,而后在目录里面建立一些文件和目录,以便能看到同步下载的效果.
若是想要了解更多的配置和启动项,能够执行如下命令查看,这里再也不赘言:
man rsyncd.conf
查看更多文档rsync --daemon --help
查看rsync的启动参数rsync的默认端口是873, 若是服务器有防火墙限制,须要开放873端口:
iptables -I INPUT -p tcp --dport 873 -j ACCEPT
若是服务器是部署在阿里云等云平台上,那可能还须要在云平台上调整安全组的出入网规则。
测试一下命令(假设A的IP是192.168.1.100):
rsync -r --list-only 192.168.1.100::test01
该命令中,
-r 参数表示要递归同步目录下的目录. --list-only 参数表示只输出,不执行真正的文件传输. 192.168.1.100 是服务器的IP,你能够替换成相应的域名. test01 就是咱们配置中指定的module name, 请记住, test01前面是两个冒号.
若是可以列出服务器上test01对应的目录内容,则表示同步已经成功.
若是发生错误 rsync: failed to connect to [你的服务器]: Operation timed out
,在检查网络正常的状况下,可能就是咱们上面提到的防火墙问题。
执行同步命令:
rsync -avP --delete --chmod=a=rwx 192.168.1.100::test01 ./tmpfolder
解释一下参数:
--delete 表示删除本地tmpfolder目录中跟服务器test01下不一致的全部文件和目录 --chmod=a=rwx 表示同步下来的文件具备a=rwx的权限(全部人可读写执行) ./tmpfolder 表示同步到本地的该目录下 -P 表示显示进度条 -v 表示采用增量的方式同步文件 -a 是 archive mode; same as -rlptgoD; 至关于简写了不少参数
另外还有一些常见的参数说明:
-u, --update 忽略客户端上(比服务端)更加新的文件 -r, --recursive 递归同步目录 -z, --compress 传输时压缩文件数据
在这里,我不使用-z
参数是由于我要传输的文件主要是pdf和图片,因此该参数做用不大。
若是数据以文本为主, 那加上-z
会好不少, 传输过程当中数据量更少。
windows下有软件cwRsync提供了rsync的功能. cwRsync的下载地址
安装步骤以下:
D:\cwRsync_5.4.1_x86_Free
。添加环境变量的方法可参考这里 D:\pdf_and_album\
。D:\cwRsync_5.4.1_x86_Free
中, 编写批处理脚本pdf_rsync.bat
, 脚本内容以下面的"脚本1"。pdf_rsync.bat
。windows设置定时任务的方法见Win XP, Win 7 脚本1内容就是咱们上面提到的命令,好比:
rsync -avP --delete --chmod=a=rwx rsync.bala.com::test01 /cygdrive/d/pdf_and_album/