Rsync同步工具的詳細使用

    RSYNC簡介:html

    Rsync (remote sync)是一款開源、快速,多功能、可實現增量的本地或遠程數據鏡像同步備份優秀工具。它可經過 LAN/WAN 快速同步多臺主機間的文件。Rsync 原本是用以取代rcp 的一個工具,它當前由 Rsync.samba.org 維護。Rsync 使用所謂的「Rsync演算法」來使本地和遠程主機之間的文件達到同步,該算法只傳送兩個文件中的不一樣部分,而不是每次都整份傳送,所以速度至關快。linux

      Rsync支持大多數的類 Unix 系統,不管是 Linux、Solaris 仍是 BSD 上都通過了良好的測試。此外,它在windows 平臺下也有相應的版本,比較知名的有 cwRsync 和 Sync2NAS。c++

RSYNC的特性:web

一、支持拷貝特殊文件如連接、設備等。算法

二、能夠有排除制定文件或目錄同步的功能,至關於打包命令tar。shell

三、能夠作到保持原來文件或目錄的權限、時間、軟硬鏈接等全部屬性均不改變。vim

四、可實現增量同步,既只同步發生變化的數據,所以數據傳輸效率很高。windows

五、可使用rcp,rsh,ssh等方式配合傳輸文件,也能夠經過直接的socket鏈接。安全

六、支持匿名的或認證的進程模式傳輸,方便進行數據備份及鏡像服務器

七、優化的流程,文件傳輸效率高

RSYNC工做模式:

Rsync有四種工做模式,具體以下:

一、列表模式

      和ls -l類似,負責列出源的內容。不只能夠看本地還能夠看遠端。

二、shell模式,也稱爲本地模式

      和cp類似,本地拷貝文件

三、遠程shell模式,能夠經過經過rcp,ssh等通道傳輸

      和rcp類似,不過能夠實現增量備份,而且可以經過安全的ssh方式進行數據傳輸。

四、服務器模式

      在這種模式下,rsync 守護進程在一臺機器上永久運行,接收文件傳輸請求。能夠把文件發送給守護進程,也能夠向它請求文件。服務器模式很是適合建立中心備份服務器或項目存儲庫。

      以上是對rsync作的一個簡單介紹,下面來安裝一下rsync,而後再詳細介紹咱們rsync的四種工做模式!

環境

CentOS6.5 x86_64位 採用最小化安裝,系統通過了基本優化

selinux爲關閉狀態,iptables爲無限制模式

源碼包存放位置:/root

在安裝以前,首先讓咱們看下系統上是否已經安裝了rsync。

[root@rsync-server ~]# rpm -qa|grep rsync

rsync-3.0.6-9.el6_4.1.x86_64

若是出現如上的狀況,說明咱們的系統已經安裝了rsync。若是沒有出現,就說明沒有安裝。

若是系統沒有安裝,咱們就須要本身安裝了。安裝rsync的方式一共有2種,一種是基於包管理器安裝,好比rpm包之類,另一種是基於源碼安裝。


一、基於包管理器安裝

[root@rsync-server ~]# yum install rsync -y


二、基於源碼安裝

  a、安裝缺乏的gcc和庫文件等

[root@rsync-server ~]# yum install -y kernel-headers glibc-headers glibc-devel libgomp gcc  gcc-c++

   b、安裝rsync

[root@rsync-server ~]# wget  http://rsync.samba.org/ftp/rsync/rsync-3.1.1.tar.gz

[root@rsync-server ~]# tar zxvf rsync-3.1.1.tar.gz

[root@rsync-server ~]# cd rsync-3.1.1

[root@rsync-server rsync-3.1.1]# ./configure --prefix=/usr/local/rsync[root@rsync-server rsync-3.1.1]# make && make install

     這樣子rsync就安裝完成了。

  咱們須要注意的是,源碼安裝的rsync默認是沒有加入xinetd的,所以你會發現,在/etc/xinetd.d目錄下找不到rsync文件。

下面,我就開始帶着你們一塊兒來了解下rsync的四種模式!

一、列表模式(list mode)

     Rsync的列表模式,即等同於在實現 ls -l 的功能。咱們能夠經過分別執行rsync和ls命令來觀察區別。

[root@rsync-server /]# rsync /rsync

drwxr-xr-x        4096 2014/06/04 00:45:06 rsync

[root@rsync-server /]# rsync /rsync/

drwxr-xr-x        4096 2014/06/04 00:45:06 .

-rw-r--r--           0 2014/06/04 00:45:01 a

-rw-r--r--           0 2014/06/04 00:45:03 b

-rw-r--r--           0 2014/06/04 00:45:05 c

-rw-r--r--           0 2014/06/04 00:45:06 d

[root@rsync-server /]# ls -dl /rsync

drwxr-xr-x. 2 root root 4096 Jun  4 00:45 /rsync

[root@rsync-server /]# ls -l /rsync

total 0

-rw-r--r--. 1 root root 0 Jun  4 00:45 a

-rw-r--r--. 1 root root 0 Jun  4 00:45 b

-rw-r--r--. 1 root root 0 Jun  4 00:45 c

-rw-r--r--. 1 root root 0 Jun  4 00:45 d

     經過上面的輸出,能夠看出來,rsync後跟文件或目錄和ls -l後跟文件和目錄的效果大致相同(不同的細節,這裏很少描述)。須要注意的是,若是你身處某個目錄,你ll能查看到所在目錄下文件列表的詳細信息。可是你執行rsync會報錯,所以rsync必須後跟文件或目錄才能查看相關的詳細信息。

     另外,rsync的列表模式是支持對遠端的目錄進行查看的,而ls -l是不具有這個功能的。

[root@rsync-server /]#

二、Shell模式(shell mode)

     在 RSYNC 的 shell 模式(本地模式)中,我會列舉rsync命令的用法和常規選項信息。

     首先來看下 RSYNC 的命令語法:

 rsync [OPTION]... SRC [SRC]... DEST

執行rsync --help可獲得上面輸出,固然輸出不只僅只有上面這一條,我僅僅將shell模式的語句摘了出來。下面對該條語句進行拆解。

 rsync  [OPTION]...  SRC  [SRC]...  DEST

1)rsync爲同步的命令

2)[OPTION]... 爲同步時的參數選項

3)SRC爲源,即須要拷貝的分區,文件或目錄等

4)[DEST]爲目地分區,文件或目錄等

rsync 經常使用的參數選項有以下:

-n : 若是擔憂命令執行不正確,一同步複製,可能這個複製的後果是致命的,那後果可就嚴重了,這裏咱們能夠加-n先測試一下

-v :  --verbose,詳細輸出模式,顯示詳細過程

-q : --quiet,靜默模式,儘量輸出少的信息

-c : --checksum,能夠對傳輸的文件進行較驗的,強制對文件傳輸進行校驗

-r  : --recursive,遞歸複製

-p : --perms,保存文件的權限

-t  : --times,保留文件的時間戳

-l  : --links,保留文件的符號連接

-u : update, 僅僅進行更新發生變化的數據

-g : --group,保留文件的屬組

-o : --owner,保留文件的屬主

-D : --devices,保留設備文件

-A : --acls,保留acl訪問控制列表

-a : --archives歸檔,複製時能夠保存原有的屬主屬主等屬性信息,甚至包括一點額外的屬性。等同於-rlptgoD

-e SSH : 遠程複製時,表示使用ssh協議做承載。若是ssh端口不是22,能夠用-e ‘ssh -p 22’

-z : 基於網絡時使用,對文件壓縮後傳輸

--progress : 顯示壓縮進度條的,簡寫-P

--stats : 顯示如何執行壓縮和傳輸的,也就是顯示傳輸狀態的

--

       更多的詳細信息,請經過man rsync來進行查看。

       須要注意的是:rsync命令在使用中,若是源參數的末尾有斜線,就會複製指定目錄內的內容,而不復制目錄自己;若是沒有斜線,則會複製目錄自己。目標參數的末尾有沒有斜線都不影響。

    接下來,請看下面兩個例子:

[root@rsync-server /]# rsync -a /rsync /backup  #會把目錄rsync直接同步至/backup目錄中去

[root@rsync-server /]# rsync -a /rsync/ /backup #會把目錄中的data/中的內容同步至/backups目錄中

如今,咱們在shell模式下,進行rsync的同步。

實例1:測試本地rsync同步

[root@rsync-server ~]# mkdir /rsync     #建立rsync測試目錄

[root@rsync-server ~]# touch /rsync/test    #在rsync測試目錄下創建test.txt文件

[root@rsync-server ~]# chmod -R 700 /rsync     #受權一下以查看同步後是否是保持了權限屬性

[root@rsync-server rsync]# ll -a /rsync/

total 8

drwx------.  2 root root 4096 Jun  4 01:01 .

dr-xr-xr-x. 26 root root 4096 Jun  4 01:01 ..

-rwx------.  1 root root    0 Jun  4 01:01 test

[root@rsync-server ~]# rsync -avz /rsync/ /tmp

sending incremental file list

./

test

sent 78 bytes  received 34 bytes  224.00 bytes/sec

total size is 0  speedup is 0.00

[root@rsync-server ~]# ls -l /tmp/test

-rwx------. 1 root root 0 Jun  4 01:01 /tmp/test

上面的例子,演示了將本地/rsync目錄下的文件,同步到/tmp目錄下。其中使用的參數,-avz上面講過。若是不明白,能夠去上面看每一個參數的詳細介紹。

三、遠程shell模式(remote shell mode)

遠程shell模式的話,和shell模式是殊途同歸。只不過,由於是要經過遠程,所以咱們須要指定遠程主機的IP,若是採用ssh咱們還須要指定ssh的端口等等。

遠程shell模式,常規分爲以下兩種狀況,其語法分別爲:

拉取pull :rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST

推送push:rsync [OPTION]... [USER@]HOST:SRC [DEST]

    下面爲你們拆解一下命令:

1)Rsync爲同步的命令

2)[OPTION]... 爲同步時的參數選項

3)[USER@]HOST... 爲Rsync同步的遠程的鏈接用戶和主機地址

4)SRC爲源,即須要拷貝的分區、文件或目錄等,和HOST之間用一個冒號鏈接

5)[DEST]爲目地分區、文件或目錄等

你們能夠發現,拉取和推送,不同的地方就是源和目標換了位置。其中拉取,表示從遠端主機把數據同步到執行命令的本地主機相應目錄。(須要注意,拉取的話,遠端主機上必定要安裝rsync,否則會拉取失敗)。推送,表示從本地主機執行命令把本地的數據同步到遠端主機指定目錄下

    下面咱們來看一個案例:

拉取實例:

    老大要求拉取172.16.100.1這臺服務器上的etc目錄到咱們的備份服務器172.16.100.2上的/backup目錄下。

操做:

經過ssh鏈接到172.16.100.1這臺服務器上,而後執行以下命令:


[root@rsync-server ~]# rsync -vzrtopg --progress -e ‘ssh -p 22’ root@172.16.100.1:/etc /backup

語法說明:

1)-vzrtopg 至關於上文的-avz,表示同步時文件和目錄屬性不變。

2)--progress 顯示同步的過程,能夠用-p替換

3)-e ‘ssh -p 22’,表示經過ssh的通道傳輸數據。若是ssh是默認的22號端口,此處的-p 22可省略。

4)root@192.168.1.111:/etc 遠程的主機用戶,地址,路徑

5)/backup本地(172.16.100.2)的路徑

推送實例:

公司內部有一臺svn服務器(172.16.100.2),公司站點的更新代碼經過後臺的測試服務器測試以後,通過svn同步到svn服務器。老大要求你將svn服務器上的代碼,推送到前臺的服務器(172.16.100.1)上。

操做:經過ssh鏈接到svn服務器(172.16.100.2)上,而後執行以下命令

[root@rsync-server ~]# rsync -avz --progress -e ‘shh -p 22’ /webrepo root@172.16.100.1:/data/web/html

特別說明:

1)上面兩個例子中的數據同步都是加密傳輸的,由於是經過ssh通道進行數據傳輸的。

2)在傳輸前須要進行鏈接用戶(通常爲系統用戶)密碼驗證,須要手工輸入。這裏咱們能夠經過配置ssh互信來實現免驗證方式同步。

3)rsync軟件必須安裝在本地及遠程服務器上

四、服務模式(daemon mode)

RSYNC的服務模式,部署時分爲rsync的服務端和rsync的客戶端。須要注意的是,rsync 的服務端和客戶端都是一個軟件包,若是你啓用了 rsync 的服務模式,則該主機就變成 rsync 服務器。所以咱們須要將 rsync 分別安裝於服務端和客戶端,服務端和客戶端使用同一個 rsync 軟件包來實現遠程鏡像和按期同步更新。

rsync 服務端可同時備份多個客戶端的數據,多個服務端備份一個客戶端的數據。 rsync 默認端口爲 873,服務器在該端口接收客戶的匿名或者認證方式的備份請求。

rsync 服務端在使用以前須要進行必要的配置,其配置文件爲 /etc/rsyncd.conf,該文件默認沒有,須要本身手動建立。Rsync服務端經過/etc/rsyncd.conf進行認證、訪問、日誌記錄等控制,該配置文件包括全局參數、模塊參數等設置。

rsyncd.conf 文件中 [module] 以前的全部參數爲全局參數,也能夠在全局參數部分定義模塊參數。在這種狀況下該參數的值就是全部模塊的默認值。全局參數設置程序使用的端口號,指定消息文件、日誌文件 pid 文件以及發送日誌消息的級別。模塊參數主要定義服務端哪一個目錄須要被同步。用戶可根據不一樣的須要指定多個模塊,每一個模塊對應須要備份的一個目錄樹,即如有 N 個須要備份的目錄樹,則須要 N 個模塊與之對應。模塊中能夠定義許多參數。下面,咱們拿出來一個rsyncd.conf文件,來給你們作詳解:

uid = rsync    # 指定的模塊傳輸文件時所用的用戶身份

gid = rsync    # 指定的site模塊傳輸文件時所用的用戶組身份

port=873       # 默認端口

use chroot = no # 默認爲true,修改成no,增長對目錄文件軟鏈接的備份

max connections = 200  # 指定最大併發鏈接數以保護服務器,超過限制的鏈接請求將被告知隨後再試。默認值爲 0,即沒有限制。

timeout = 300          # 服務器會話的超時時間

pid file = /var/run/rsyncd.pid   # 進程啓動後,進程號存放路徑

lock file = /var/run/rsyncd.lock # 服務啓動、中止會用到鎖文件

log file = /var/log/rsyncd.log   # 指定日誌文件的路徑

Log fromat = %h %o %f %l %b      # 指定日誌記錄的格式

motd file = /etc/rsyncd.motd     # 登錄消息提示文件,能夠不配置。默認爲空。

[test]         # 模塊名稱,名稱能夠任意寫,不過通常是以路徑命名,最好見名意

Comment = test # 模塊信息描述,該描述連同模塊名在客戶鏈接獲得模塊列表時顯示給客戶。默認沒有描述定義

path=/test/    # 指定供備份的目錄路徑,必須指定該參數。該目錄路徑是rsync服務端的一個路徑,提供給客戶端上傳或下載

ignore erros   # 忽略錯誤

read only = false  # 設定是否容許客戶上載文件。若爲 true 任何上載請求均會失敗,若爲 false 且客戶端擁有服務器目錄讀寫權限則能夠上載。默認值爲 true 。

write only 設定是否容許客戶下載文件。若爲 true 任何下載請求均會失敗,默認值爲 false 。

list = false       # 設定當客戶請求可使用的模塊列表時,是否列出該模塊。若爲 false,則建立隱藏的模塊。默認值爲 true

hosts allow=192.168.137.0/24  # 指定容許客戶鏈接的 IP 地址。能夠爲單個 IP 地址或整個網段。多個 IP 或網段須要以空格隔開。默認是容許全部主機鏈接。

hosts deny=*   # 指定拒絕鏈接的客戶IP地址,設置方式和hosts allow相同。

Dont commpress # 指定不進行壓縮處理便可傳輸的文件,默認值是 *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

auth users = rsync_backup  # 該選項指定由空格或逗號分隔的用戶名列表,只有這些用戶才容許鏈接該模塊。這裏的用戶不必定是客戶端存在的用戶。若是"auth users"被設置,那麼客戶端發出對該模塊的鏈接請求時,須要對用戶身份進行驗證。用戶的名和密碼以明文方式存放在"secrets file"選項指定的文件中。默認狀況下無需密碼就能夠鏈接模塊 ( 也就是匿名方式 )。

secrets file = /etc/rsync.password # 虛擬用戶的密碼文件

exclude = common/   # 用來指定多個由空格隔開的多個文件或目錄 ( 相對路徑 ),並將其添加到 exclude 列表中。這等同於在客戶端命令中使用 --exclude 參數。一個模塊只能指定一個 exclude 選項。可是須要注意的一點是該選項有必定的安全性問題,客戶端頗有可能繞過 exclude 列表,若是但願確保特定的文件不能被訪問,那就最好結合 uid/gid 選項一塊兒使用。

pre-xfer exec, post-xfer exec  # 設置可在文件傳輸前/後執行的命令。若在文件傳輸前執行的命令失敗,則取消本次傳輸操做。

以上就是,rsyncd.conf的詳細配置信息了。我將不少的默認不顯示的參數也列舉了出來,你們使用的時候能夠靈活掌握。

下面,我就帶你們來一塊兒配置一個 rsync的服務端和rsync的客戶端!

環境

CentOS6.5 x86_64位 採用最小化安裝,系統通過了基本優化

selinux爲關閉狀態,iptables爲無限制模式

源碼包存放位置:/root

服務器架構:

rsync-server:172.16.100.1

rsync-client:172.16.100.2

RSYNC 服務端部署:

一、安裝rsync,而且配置服務端主配置文件

[root@rsync-server ~]# yum install rsync -y

[root@rsync-server ~]# vim /etc/rsyncd.conf

uid = root

gid = root

use chroot = no

max connections = 200

timeout = 300

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

ignore errors

read only = false

list = false

hosts allow = 172.16.100.0/24

hosts deny = *

auth users = rsync_backup

secrets file = /etc/rsync.password

[sunsky]

path = /test

二、建立 rsync.password 做爲用戶密碼文件

[root@rsync-server ~]# touch /etc/rsync.passord

[root@rsync-server ~]# chmod 600 /etc/rsyncd.password

[root@rsync-server ~]# vim rsyncd.password  #裏面記錄條目的格式爲「用戶 : 密碼」

    rsync_backup:redhat


ps: /etc/rsyncd.password 的權限必須是600,客戶端的/etc/rsync.password也必須爲600,否則請求文件時會報錯


三、(可選)建立 rsync.motd 做爲登陸消息文件。該文件爲選擇性配置文件,生產環境不推薦使用。

[root@rsync-server ~]# touch /etc/rsyncd.motd

[root@rsync-server ~]# vim rsyncd.conf

============================

This is Critical Data Server

=============================

四、建立模塊中指定的文件

[root@rsync-server ~]# mkdir /test

[root@rsync-server ~]# chown root.root /test   #更改目錄的權限爲rsyncd.conf中uid和gid指定屬主和屬組

五、以守護進程方式啓動 rsync

 Rsync服務端的啓動分2種,一種是交給 xinetd 去管理,另外就是本身手動配置守護進程。

 A、手動配置rsync守護進程

[root@rsync-server ~]# /usr/bin/rsync --daemon  --config=/etc/rsyncd.conf  #注意若是你的rsyncd.conf文件在/etc/目錄下,就不須要再用--config去指定了。--daemon是以守護進程的方式啓動

咱們能夠將上面的命令寫入 /etc/rc.local 中,這樣當系統啓動時,就會自動以守護進程的方式去運行 rsync。

補充:

          重啓rsync的組合命令

[root@rsync-server ~]# pkill rsync  #關閉rsync服務

[root@rsync-server ~]# rsync --daemon #啓動rsync服務

[root@rsync-server ~]# ps -ef | grep rsync   #檢查是否啓動

B、交由xinetd管理

[root@rsync-server ~]# yum install xinetd  #安裝xinetd

[root@rsync-server ~]# vim /etc/xinetd.d/rsync

     disable= no  # 默認爲yes,須要將他設置爲no,讓xinetd接管rsync服務。注意,若是你使用手動的方式,這裏就修改成no,即拒絕xinetd接管rsync服務。

[root@rsync-server ~]# /etc/init.d/xinetd  start # 啓動xinetd服務,則默認會以守護進程方式啓動rsync 服務

六、檢查服務狀態

[root@rsync-server ~]# netstat -lntup |grep 873

[root@rsync-server test]# netstat -lntup |grep 873

tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      10234/rsync

tcp        0      0 :::873                      :::*                        LISTEN      10234/rsync

或者

[root@rsync-server ~]# lsof -i tcp:873

[root@a test]# lsof -i tcp:873

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

rsync   10234 root    3u  IPv4  93239      0t0  TCP *:rsync (LISTEN)

rsync   10234 root    5u  IPv6  93240      0t0  TCP *:rsync (LISTEN)

補充:

    手動啓動rsync的常見參數:

[root@rsync-server ~]# rsync --daemon   # daemon 表示以守護進程的方式啓動rsync服務

經常使用啓動參數:

--daemon   # 表示以守護進程的方式啓動rsync服務

--address  # 綁定指定ip地址提供服務,即服務器是多網卡模式或多虛擬IP模式,須要指定某個固定ip提供服務

--config=FILE  # 更改配置文件路徑,而不去使用默認的/etc/rsyncd.conf

--port=PORT    # 更改其它端口提供服務,而不去使用模式的873端口。

以上即爲rsync服務端的整個配置步驟了!

RSYNC 服務端已經部署完畢,接下來若是要使用的話,確定還須要搭配 rsync 客戶端才行!下面就來看,rsync客戶端怎麼部署!

RSYNC 客戶端部署

RSYNC 客戶端部署起來很是簡單,咱們僅僅須要安裝 rsync 軟件,而後建立一個本地密碼文件。該密碼文件爲對應rsync 服務端配置文件裏面每一個模塊下面的虛擬用戶的密碼,以此來實現免密碼同步!

操做以下:

一、安裝rsync

[root@rsync-server ~]# yum install rsync -y

二、配置本地密碼文件

[root@rsync-server ~]# vim /etc/rsync.password   # 該文件裏面僅存放密碼便可

   redhat

[root@rsync-server ~]# cat /etc/rsync.password   # 配置完畢以後檢查

[root@rsync-server ~]# ll /etc/rsync.password    # 配置完畢以後檢查

OK!!!

RSYNC的服務端和客戶端都配置完畢,如今咱們能夠進行測試了。

咱們須要去rsync客戶端,來完成下面的測試操做。須要注意,測試一樣分爲兩種狀況,每種狀況又有兩種語法寫法,分別爲:

拉取:①rsync [OPTION...] [USER@]HOST::SRC... [DEST]

      ②rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]

推送:①rsync [OPTION...] SRC... [USER@]HOST:DEST

      ②rsync [OPTION...] SRC...  rsync://[USER@]HOST[:PORT]/DEST

特別值得注意的是,與遠程shell模式命令不一樣的是,第①種語法格式, [USER@]HOST::SRC和 [USER@]HOST::DEST結尾處,均爲雙冒號鏈接SRC或DEST。另外,這個SRC或DEST已經再也不是路徑了,而是守護進程中配置的模塊的名稱了。

下面列舉咱們在rsync客戶端上,對rsync服務端進行拉取或推送的操做範例:

第一種格式:

拉取:

rsync -avzP rsync_backup@172.16.100.1::sunsky /test/ --password-file=/etc/rsync.password

推送:

rsync -avzP /test rsync_backup@172.16.100.1::sunsky --password-file=/etc/rsync.password

第二種格式:

    拉取:

rsync -avzP rsync://rsync_backup@172.16.100.1:/sunsky/ /test/ --password-file=/etc/rsync.password

    推送:

rsync -avzP /test/ rsync://resync_backup@192.168.1.111:/sunsky/  --password-file=/etc/rsync.password

       以上就是,rsync整個服務端和客戶端的配置。

       在生產環境中,咱們能夠專門部署一臺rsync服務器,專門負責接收業務服務器的日誌歸檔和配置文件歸檔。固然,咱們也能夠部署在svn服務器以前,來做爲網站代碼推送的服務器,或者說一臺web服務器專門用來作分發的時候。

 可是咱們知道,咱們的日誌歸檔都是在凌晨,所以咱們不可能每天晚上去作向rsync服務端的推送操做。而且,若是平常web內容作分發的次數頻繁的話,咱們不可能每時每刻都盯着它去作手動推送。所以咱們能夠藉助crontab計劃任務來實現定時推送。

[root@rsync-server ~]# crontab -e

# Automatic synchronization log files at 1 a.m

* 1 * * * /usr/bin/rsync-avzP rsync_nobody@172.16.100.1::weblog /data/log/  --password-file=/etc/rsyncd.passwd > /dev/null 2>&1

# Automatic distribution site file points every second of every day

* * * * * /usr/bin/rsync-avzP --delete rsync_nobody@172.16.100.1::webdata /data/web/  --password-file=/etc/rsyncd.passwd > /dev/null 2>&1

注意:上面用到的weblog和webdata都是模塊的名字,咱們在rsyncd.conf裏面指定模塊所對應的目錄路徑。

可是,咱們仍然會發現一個問題,雖然使用計劃認爲能知足咱們的日誌歸檔定時推送到rsync服務端,可是每次都有1分鐘的延遲。而且,在某些做爲網站發佈平臺的狀況下,rsync每分鐘都去檢查總體一致性而後作推送,這樣子很是耗費資源。所以,咱們須要對此種狀況進行改良。在後面一篇博文,我會帶你們一塊兒瞭解rsync+inotify,藉助rsync+inotify來實現實時同步文件。

在本文最後面,我貼上rsync的--delete和--exclude的操做效果!

--delete操做以下:

[root@rsync-server ~]# ls /test/  #查看rsync服務端,sunsky模塊下的/test目錄的文件列表

e

[root@rsync-client ~]# ls /test/   #查看rsync客戶端本地/test目錄的文件列表

a  b  c  d

以上爲操做前的環境,請保持這個環境一致,而後作以下操做:(下面的推送和拉取都是基於此環境作的)

在rsync客戶端作拉取操做:

[root@rsync-client ~]# rsync -avzP --delete rsync_backup@172.16.100.1::sunsky /test/ --password-file=/etc/rsync.password

receiving incremental file list

deleting d

deleting c

deleting b

deleting a

./

e

           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/2)

sent 86 bytes  received 143 bytes  458.00 bytes/sec

total size is 0  speedup is 0.00

[root@rsync-client ~]# ls /test/

e

[root@rsync-server ~]# ls /test/

e

 咱們發現,rsync客戶端自己的a,b,c,d文件都消失了,取而代之的是e文件,而且咱們在rsync的拉取過程當中,也能看到刪除操做!

在rsync客戶端作推送操做:

[root@rsync-client ~]# rsync -avzP --delete /test/ rsync_backup@172.16.100.1::sunsky --password-file=/etc/rsync.password

sending incremental file list

./

deleting e

a

           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=3/5)

b

           0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=2/5)

c

           0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=1/5)

d

           0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=0/5)

sent 201 bytes  received 87 bytes  576.00 bytes/sec

total size is 0  speedup is 0.00

[root@rsync-client ~]# ls /test/

a  b  c  d

[root@rsync-server ~]# ls /test/

a  b  c  d

咱們發現,rsync服務端自己的e文件消失了,取而代之的是a,b,c,d文件,而且咱們在rsync的推送過程當中,也能看到刪除操做!

--exclude操做以下:

[root@rsync-server ~]# tree /test/

/test/

0 directories, 0 files

[root@rsync-client ~]# tree /test/

/test/

├── a

├── b

├── c.txt

├── x

│   └── xxx.txt

└── x.txt

2 directories, 4 files

以上爲操做前的環境,請保持這個環境一致,而後作以下操做:

在rsync客戶端作推送操做:

[root@rsync-client ~]# rsync -avz --exclude=*.txt /test/ root@172.16.100.1:/test/

root@172.16.100.1's password:

sending incremental file list

./

a

b

x/

sent 154 bytes  received 57 bytes  60.29 bytes/sec

total size is 0  speedup is 0.00

在rsync服務端進行查看同步效果:

[root@rsync-server ~]# tree /test/

/test/

├── a

├── b

└── x

1 directory, 2 files

咱們能夠發現,只要是能被*.txt匹配到的都沒有被推送過去!

若是說,你有不少須要排除的目錄或者文件,不但願他們被同步過去,此時你可使用--exclude-from參數,該參數後面跟一個文件,你能夠將須要匹配排除的項寫到該文件裏面!

例子:

在rsync客戶端作推送操做:

[root@rsync-client ~]# cat /tmp/exclude

x

*.txt

[root@rsync-client ~]# rsync -avz --exclude-from=/tmp/exclude /test/ root@172.16.100.1:/test/

root@172.16.100.1's password:

sending incremental file list

./

a

b

xx/

sent 151 bytes  received 57 bytes  59.43 bytes/sec

total size is 0  speedup is 0.00

在rsync服務端進行查看同步效果:

[root@rsync-server ~]# tree /test/

/test/

├── a

├── b

└── xx

1 directory, 2 files

以上就是咱們的--exclude和--exclude-from的詳細用法!

相關文章
相關標籤/搜索