本文將在一臺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/