CentOS 7.7 rsync使用詳解,並結合inotify實現文件實時同步

目錄: 

相關概念

編譯安裝rsync

rsync簡單使用示例

rsync + crontab實現文件定時同步,併發送郵件提醒

rsync daemon + inotify實現文件實時同步

 

一、相關概念

1、rsyncremote synchronize,一款開源、快速的、可實現全量及增量本地或遠程數據同步的軟件,下載地址https://rsync.samba.org/

2、rsync特點:

(1)傳輸速度快,首次全量傳輸,後續會對比文件的不同,只傳輸文件更新部分,實現增量傳輸;

(2)傳輸安全性高;

(3)支持匿名傳輸,方便網站鏡像;

(4)支持傳輸軟鏈接、設備等特殊文件;

(5)支持傳輸時保留源文件的權限、屬主、屬組、時間、軟硬鏈接等信息;

(6)支持傳輸時排除指定的目錄或文件;

(7)支持傳輸時壓縮,使用更少的帶寬,提高傳輸效率。

3、rsync工作模式:

(1)單個服務器本地目錄之間傳輸數據(類似cp);

(2)藉助SSH通道傳輸數據(類似scp);

(3)daemon守護進程方式傳輸數據(需要/etc/rsyncd.conf配置文件)。

4、inotify:一種強大的、異步的文件系統事件監控機制。Linux內核從2.6.13起,加入了inotify支持,通過inotify可以監控文件系統中添加、刪除、修改、移動等各種事件,利用這個內核接口,第三方軟件就可以監控文件系統下文件的各種變化情況,而inotify-tools正是提供監控功能的軟件。

5、inotify-tools:可在命令行下提供對文件系統事件的監控,包括inotifywaitinotifywatch兩個命令行工具,下載地址https://github.com/inotify-tools/inotify-tools/releases

(1)inotifywait:在被監控的目錄或文件中等待特定文件系統事件(如openclosedelete等)發生,執行後處於阻塞狀態;

(2)inotifywatch:收集被監控文件系統的數據,統計文件系統事件發生的次數。


二、編譯安裝rsync

1、安裝編譯環境:# yum -y groupinstall "Development Tools"

2、編譯安裝rsync

# tar -xf rsync-3.1.3.tar.gz -C /usr/src

# cd /usr/src/rsync-3.1.3

# ./configure --prefix=/usr/local/rsync --enable-profile

# make && make install

備註:CentOS 7.7yum安裝的rsync版本爲3.1.2

3、配置環境變量:

# vim /etc/profile.d/rsync.sh

export PATH=/usr/local/rsync/bin:$PATH

# . /etc/profile.d/rsync.sh

4、查看rsync版本:# rsync --version

image.png

5、常用選項:

選項

含義

-v

詳細模式輸出,傳輸時顯示進度等信息

-q

精簡模式輸出

-c

根據校驗和跳過,而不是修改時間和文件大小

-a

歸檔模式,以遞歸方式傳輸文件,並保持文件所有屬性,等同於-rlptgoD選項

-r

遞歸方式傳輸目錄下的所有子目錄及文件

-R

使用相對路徑名

-b

傳輸的同時創建備份,如果目標目錄已經存在同名文件時,將舊文件重命名爲~filename後綴

--backup-dir=DIR

定義備份文件存放目錄

--suffix=SUFFIX

定義備份後綴

-u

僅僅進行更新,即跳過所有已經存在於目標目錄,且文件時間晚於要備份的文件

-d

不以遞歸方式傳輸目錄下的所有子目錄及文件

-l

保留符號鏈接(軟鏈接)

-L

如果傳輸的文件爲軟鏈接,則傳輸軟鏈接指向的源文件

-H

保留硬鏈接

-p

保留文件權限

-E

保留可執行權限

-X

保留擴展屬性

-o

保留文件屬主

-g

保留文件屬組

-t

保留文件修改時間

-n

試運行,不做任何更改

-W

完整傳輸文件(不使用delta-xfer算法)

-x

不跨越文件系統邊界

-e

定義要使用的遠程Shell

--existing

僅更新已經存在於目標目錄的文件,而不更新新創建的文件

--ignore-existing

不更新已經存在於目標目錄的文件

--delete

刪除目標目錄有,但源目錄沒有的文件

--delete-excluded

刪除目標目錄有,但源目錄沒有的文件

--ignore-errors

即使有I/O錯誤也要刪除

--force

強制刪除不爲空的目錄

--max-delete=NUM

最多刪除NUM個文件

--max-size=SIZE

不傳輸任何大於SIZE的文件

--min-size=SIZE

不傳輸任何小於SIZE的文件

--partial

保留部分傳輸的文件,爲加快再次傳輸

--partial-dir=DIR

DIR中保留部分傳輸的文件

--timeout=SECONDS

定義I/O超時秒數

--contimeout=SECONDS

定義後臺程序連接超時秒數

-I

不跳過具有相同大小和修改時間的文件

--size-only

跳過大小匹配的文件

-T   DIR

DIR中創建臨時文件

-z

傳輸時壓縮文件

--compress-level=NUM

定義壓縮級別

--exclude=PATTERN

排除模式匹配的文件

--exclude-from=FILE

FILE中讀取排除模式

--include=PATTERN

不排除模式匹配的文件

--include-from=FILE

FILE中讀取包含模式

--address=ADDRESS

定義IP地址

--port=PORT

定義rsync端口號

--stats

提供文件傳輸統計信息

--progress

傳輸時顯示進度

-P

等同於--partial --progress

--log-file=FILE

定義日誌文件

--log-file-format=FMT

定義日誌文件記錄格式

--password-file=FILE

定義用戶認證文件

--list-only

列出文件而非複製文件

--version

查看版本號

-h

查看幫助信息


三、rsync簡單使用示例

1、test1目錄下的ab文件同步至test2目錄:

# rsync -avz /test1/{a,b} /test2

2、test1目錄下的c目錄同步至test2目錄:

# rsync -avz /test1/c /test2

3、假設test1目錄下有abc三個文件,test2目錄下有ad兩個文件和e一個目錄,保證test2目錄內容與test1一致:

# rsync -avz --delete /test1/ /test2/

4、假設test1目錄下有abcde五個文件,test2目錄爲空目錄,除了bd以外的test1目錄下的所有文件都同步至test2目錄:

# rsync -avz --exclude={b,d} /test1/ /test2/

5、假設test1目錄下有abcde五個文件,test2目錄下有xyz三個目錄,除了bd以外的test1目錄下的所有文件都同步至test2目錄,且刪除test2目錄下的xyz三個目錄:

# rsync -avz --delete --exclude={b,d} /test1/ /test2/

6、將本地192.168.0.120服務器test1目錄下的所有文件和目錄同步至遠程192.168.0.121服務器test2目錄:

# rsync -avz -e 'ssh -p 22' /test1/ [email protected]:/test2

7、列出遠程192.168.0.121服務器test2目錄下的內容:

# rsync [email protected]:/test2/

8、將遠程192.168.0.121服務器整個test2目錄同步至本地192.168.0.120服務器test1目錄:

# rsync -avz -e 'ssh -p 22' [email protected]:/test2 /test1

備註:

(1)示例6~示例8中,遠程192.168.0.121服務器中需要事先安裝rsync,否則會提示“rsync error: remote command not found”;

(2)如果同步的是目錄中的所有內容,需要在目錄後加/;如果同步的是整個目錄,則不需要在目錄後加/

 

四、rsync + crontab實現文件定時同步,併發送郵件提醒

1、演示環境:

IP

操作系統

主機名

目錄

角色

192.168.0.120

CentOS   7.7 x86_64

web

/usr/share/nginx/html

本地服務器(rsync客戶端)

192.168.0.121

CentOS   7.7 x86_64

backup

/data/nginx

遠程服務器(rsync服務端)

目標:每隔2小時將web節點/usr/share/nginx/html目錄下的所有子目錄和文件同步至backup節點/data/nginx目錄。

2、準備工作:

(1)兩個節點關閉firewalldSELinux

(2)兩個節點配置主機名;

(3)兩個節點時間同步;

(4)兩個節點修改/etc/hosts配置文件:

# vim /etc/hosts

192.168.0.120 web

192.168.0.121 backup

(5)web節點配置免密登錄backup節點:

# ssh-keygen -t rsa -b 2048 -P ""

# ls ~/.ssh

# ssh-copy-id root@backup

# ssh root@backup

web節點:# cat ~/.ssh/id_rsa.pub

backup節點:# cat ~/.ssh/authorized_keys

備註:內容一致

(6)web節點安裝配置Nginx

# yum -y install epel-release

# yum -y install nginx

# systemctl start nginx

# systemctl status nginx

# ss -tunlp | grep -w :80

# ls /usr/share/nginx/html

(7)web節點安裝配置crond

# yum -y install crontabs

# systemctl start crond

# systemctl status crond

# systemctl enable crond

(8)web節點配置郵件服務:

# yum -y install mailx

# cp /etc/mail.rc{,.bak}

# vim /etc/mail.rc,末尾新增如下代碼:

set [email protected]

set smtp=smtp.qq.com

set [email protected]

set smtp-auth-password=QQ郵箱授權碼

set smtp-auth=login

# echo "Hello World" | mail -s "test" [email protected]

image.png

(9)backup節點創建目錄:# mkdir -pv /data/nginx

3、web節點安裝配置rsync

(1)安裝編譯環境:# yum -y groupinstall "Development Tools"

(2)編譯安裝rsync

# tar -xf rsync-3.1.3.tar.gz -C /usr/src

# cd /usr/src/rsync-3.1.3

# ./configure --prefix=/usr/local/rsync --enable-profile

# make && make install

(3)配置環境變量:

# vim /etc/profile.d/rsync.sh

export PATH=/usr/local/rsync/bin:$PATH

# . /etc/profile.d/rsync.sh

4、web節點編寫同步腳本:

# mkdir -pv /scripts

# vim /scripts/rsync_backup.sh

#!/bin/bash

/usr/local/rsync/bin/rsync -azL --delete -e 'ssh -p 22' /usr/share/nginx/html/ [email protected]:/data/nginx/

if [ $? == 0 ]; then

/usr/bin/echo "successfully" | /usr/bin/mail -s "192.168.0.120 nginx backup" [email protected]

else

/usr/bin/echo "failed" | /usr/bin/mail -s "192.168.0.120 nginx backup" [email protected]

fi

# chmod +x /scripts/rsync_backup.sh

5、web節點配置任務計劃:

# crontab -e

0 */2 * * * /scripts/rsync_backup.sh &> /dev/null

# crontab -l

6、測試同步:

(1)第一次同步:

web節點:

image.png

backup節點:

image.png

收取郵件:

image.png

(2)創建文件:

web節點創建文件:# echo "error" > error.html

image.png

backup節點查看:

image.png

收取郵件:

image.png

備註:爲了演示效果,將任務計劃時間間隔調整爲3分鐘

(3)刪除文件:

web節點刪除文件:# rm -rf 404.html 50x.html nginx-logo.png poweredby.png

image.png

backup節點查看:

image.png


五、rsync daemon + inotify實現文件實時同步

1、   演示環境:

IP

操作系統

主機名

目錄

角色

192.168.0.120

CentOS   7.7 x86_64

web

/usr/share/nginx/html

本地服務器(rsync客戶端)

192.168.0.121

CentOS   7.7 x86_64

backup

/data/nginx

遠程服務器(rsync服務端)

目標:將web節點/usr/share/nginx/html目錄下的所有子目錄和文件實時同步至backup節點/data/nginx目錄。

2、準備工作:

(1)兩個節點關閉firewalldSELinux

(2)兩個節點配置主機名;

(3)兩個節點時間同步;

(4)兩個節點修改/etc/hosts配置文件:

# vim /etc/hosts

192.168.0.120 web

192.168.0.121 backup

(5)web節點配置免密登錄backup節點:

# ssh-keygen -t rsa -b 2048 -P ""

# ls ~/.ssh

# ssh-copy-id root@backup

# ssh root@backup

web節點:# cat ~/.ssh/id_rsa.pub

backup節點:# cat ~/.ssh/authorized_keys

備註:內容一致

(6)web節點安裝配置Nginx

# yum -y install epel-release

# yum -y install nginx

# systemctl start nginx

# systemctl status nginx

# ss -tunlp | grep -w :80

# ls /usr/share/nginx/html

(7)backup節點創建目錄:# mkdir -pv /data/nginx

3、兩個節點安裝配置rsync

(1)安裝編譯環境:# yum -y groupinstall "Development Tools"

(2)編譯安裝rsync

# tar -xf rsync-3.1.3.tar.gz -C /usr/src

# cd /usr/src/rsync-3.1.3

# ./configure --prefix=/usr/local/rsync --enable-profile

# make && make install

(3)配置環境變量:

# vim /etc/profile.d/rsync.sh

export PATH=/usr/local/rsync/bin:$PATH

# . /etc/profile.d/rsync.sh

4、backup節點修改rsyncd.conf配置文件:

# mv /etc/rsyncd.conf{,.bak}

# vim /etc/rsyncd.conf

pid file = /var/run/rsyncd.pid

port = 873

address = 192.168.0.121

[nginx]

comment = nginx html docs

path = /data/nginx

use chroot = no

max connections = 5

log file = /var/log/rsyncd.log

lock file = /var/run/rsyncd.lock

read only = no

list = no

uid = root

gid = root

auth users = ryuser

secrets file = /etc/.rsync.passwd

hosts allow = 192.168.0.120

ignore errors

timeout = 600

dont compress = *.zip *.rar *.7z *.tar *.gz *.xz *.bz2 *.tar.gz *.tar.xz *.tar.bz2 *.tgz *.z

# chmod 600 /etc/rsyncd.conf

備註:常用參數介紹(# man rsyncd.conf

全局參數

含義

pid   file = /var/run/rsyncd.pid

保存進程號的pid文件存放位置

port =   873

默認監聽端口號

address   = 192.168.0.121

默認監聽地址

模塊參數

含義

[nginx]

模塊名稱,可以定義多個

comment   = nginx html docs

定義當客戶端獲取可用模塊列表時,顯示在模塊名稱旁的描述字符串

path =   /data/nginx

傳輸數據存放目錄

use   chroot = no

禁止禁錮在path參數定義的目錄中

max connections   = 5

定義允許的客戶端最大併發連接數,當達到最大值時,連接的任何客戶端都將收到一條消息,告訴它們稍後再試,默認值爲0,表示沒有限制

log   file = /var/log/rsyncd.log

日誌文件存放位置,啓動rsync後會自動創建此文件,無需手動創建

lock   file = /var/run/rsyncd.lock

定義用於支持“max   connections最大併發連接數”參數的鎖文件存放位置

read   only = no

定義客戶端是否能夠上傳文件,默認情況下爲只讀

list =   no

定義當客戶端要求列出可用模塊時是否列出該模塊,如果該值爲no,則當“hosts allow”或“hosts   deny”拒絕客戶端訪問該模塊時,守護進程將假裝該模塊不存在,默認情況下,模塊是可列出的

uid =   root

定義當後臺程序以root用戶身份運行時,與該模塊之間的文件傳輸應發生的用戶名或用戶ID,超級用戶運行時的默認設置是切換到系統的nobody用戶,非超級用戶的默認設置是不更改用戶

gid   = root

定義訪問模塊時使用的一個或多個組名/標識,第一個組將是默認組,任何額外的組都將設置爲附加組,超級用戶運行時的默認設置是切換到系統的nobody(或nogroup)組,而不使用其它附加組,非超級用戶的默認設置是不更改任何組屬性

exclude

定義採用以空格分隔的守護程序排除模式列表,模式可以用“-”或“+”限定,以顯式定義exclude/include,只有一個“exclude”參數可以應用於給定模塊

include

使用“include”覆蓋“exclude”參數的效果,只有一個“include”參數可以應用於給定模塊

exclude   from

定義守護進程排除模式的文件,每行一個,只有一個“exclude   from”參數可以應用於給定模塊

include   from

定義守護進程包含模式的文件,類似於“exclude   from”,只有一個“include   from”參數可以應用於給定模塊

auth   users = ryuser

定義以逗號或空格分隔的授權規則列表,在最簡單的形式中,列出允許連接到該模塊的用戶名,用戶名不需要存在於本地系統中,如果設置了“auth   users”,則將要求客戶端提供連接到模塊的用戶名和密碼,純文本用戶名和密碼存儲在由“secrets   file”參數定義的文件中,默認情況下,所有用戶都可以在沒有密碼的情況下進行連接(稱爲“匿名rsync”)

secrets   file = /etc/.rsync.passwd

定義用於驗證模塊的用戶名密碼,連同“auth   users”參數一起使用

hosts   allow = 192.168.0.120

允許數據同步的客戶端IP,可以設置多個,用英文狀態逗號分隔

hosts   deny = 192.168.0.0/24

禁止數據同步的客戶端IP,可以設置多個,用英文狀態逗號分隔

ignore   errors

定義rsyncd在決定是否運行傳輸的刪除階段時忽略守護進程上的I/O錯誤,通常,如果發生任何I/O錯誤,rsync會跳過--delete步驟,以防止由於臨時資源不足或其它I/O錯誤而導致災難性刪除,在某些情況下,測試會適得其反,因此可以使用該參數關閉此行爲

timeout   = 600

客戶端連接服務端的超時時長,單位秒,默認值爲0,表示不會超時

dont   compress = *.zip *.rar *.7z *.tar *.gz *.xz *.bz2 *.tar.gz *.tar.xz *.tar.bz2   *.tgz *.z

數據同步時不會執行壓縮的文件類型

5、backup節點創建用戶認證文件:

# echo "ryuser:root@1234" > /etc/.rsync.passwd

# chmod 600 /etc/.rsync.passwd

備註:服務端文件格式,用戶名:密碼,可以設置多個,每行一個

6、backup節點配置rsync

# rsync --daemon

# ps -ef | grep rsync

# ss -tunlp | grep -w 873

# echo "/usr/local/rsync/bin/rsync --daemon" >> /etc/rc.d/rc.local

# chmod +x /etc/rc.d/rc.local

備註:

(1)使用命令# rsync --daemon --help查看rsync daemon模式下的幫助信息;

(2)結束rsync進程可使用命令# pkill rsync # yum -y install psmisc # killall rsync

7、web節點創建用戶認證文件:

# echo "root@1234" > /etc/.rsync.passwd

# chmod 600 /etc/.rsync.passwd

備註:客戶端文件中只需包含密碼,且密碼要和backup節點(服務端)一致

8、web節點查看內核是否支持inotify

# ls /proc/sys/fs/inotify

# cat /proc/sys/fs/inotify/max_queued_events

# cat /proc/sys/fs/inotify/max_user_instances

# cat /proc/sys/fs/inotify/max_user_watches

image.png

備註:

(1)如果顯示max_queued_eventsmax_user_instancesmax_user_watches,說明內核支持inotify

(2)max_queued_events:定義inotify實例事件隊列的最大長度,如果定義的值太小,會出現“Event Queue Overflow”錯誤;

(3)max_user_instances:定義每個用戶最多可以創建的inotify實例數量;

(4)max_user_watches:定義每個inotify實例最多可以監控的目錄數量。

9、web節點調整inotify內核參數大小:

# vim /etc/sysctl.conf,末尾新增如下代碼:

fs.inotify.max_queued_events = 50000000

fs.inotify.max_user_instances = 65535

fs.inotify.max_user_watches = 50000000

# sysctl -p

image.png

image.png

10、web節點安裝配置inotify-tools

(1)編譯安裝inotify-tools

# tar -xf inotify-tools-3.20.2.2.tar.gz -C /usr/src

# cd /usr/src/inotify-tools-3.20.2.2

# ./configure --prefix=/usr/local/inotify-tools

# make && make install

備註:CentOS 7.7中先安裝epel源,然後通過yum安裝的inotify-tools版本爲3.14

(2)配置環境變量:

# vim /etc/profile.d/inotify-tools.sh

export PATH=/usr/local/inotify-tools/bin:$PATH

# . /etc/profile.d/inotify-tools.sh

(3)inotifywait命令常用選項:

選項

含義

-h

查看幫助信息

@<file>

排除無需監控的文件

--exclude   <pattern>

排除與擴展正則表達式<pattern>匹配的文件,區分大小寫

--excludei   <pattern>

排除與擴展正則表達式<pattern>匹配的文件,不區分大小寫

--include   <pattern>

不排除與擴展正則表達式<pattern>匹配的文件,區分大小寫

--includei   <pattern>

不排除與擴展正則表達式<pattern>匹配的文件,不區分大小寫

-m

始終保持事件監聽狀態直到超時,即捕獲一個事件後不退出,默認捕獲一個事件後立即退出

-d

-m選項含義基本一致,後臺運行

-r

遞歸監控目錄,包括子目錄和文件

--fromfile   <file>

從標準輸入或<file>中讀取要監控的文件

--outfile   <file>

打印事件至<file>,而非標準輸出     

-s

發送錯誤至syslog,而非標準錯誤

-q

僅打印監控事件信息

-qq

不打印任何信息

--format   <fmt>

定義事件輸出格式:

Ø %w:事件發生時,被監控的目錄名

Ø %f:事件發生時,被監控目錄中觸發事件的文件名

Ø %e:替換爲發生的事件,用英文狀態逗號分隔

Ø %T:使用由--timefmt選項定義的時間輸出格式,此格式是通過strftime函數進行匹配時間格式信息的

--timefmt   <fmt>

定義時間輸出格式:

Ø %d:十進制方式顯示每月的第幾天(範圍01~31

Ø %D:顯示“月//年(%m/%d/%y)”

Ø %F:顯示“年--日(%Y-%m-%d)”

Ø %H:十進制方式顯示小時,24小時制(範圍00~23

Ø %m:十進制方式顯示月份(範圍01~12

Ø %M:十進制方式顯示分鐘(範圍00~59

Ø %S:十進制方式顯示秒鐘(範圍00~59

Ø %T:顯示“時::秒(%H:%M:%S)”

Ø %y:十進制方式顯示年份,不包括世紀信息(範圍00~99

Ø %Y:十進制方式顯示年份,包括世紀信息

-t   <seconds>

當監聽單個事件時,在等待事件<seconds>秒後超時,如果<seconds>爲負數,inotifywait將永不超時

-e   <event>

定義監聽的事件,如省略,則監聽所有事件

(4)inotifywait命令-e選項可定義的事件類型:

事件類型

含義

access

文件或目錄內容被讀取

modify

文件或目錄內容被修改

attrib

文件或目錄屬性被改變

close_write

讀寫模式下,文件或目錄被關閉

close_nowrite

只讀模式下,文件或目錄被關閉

close

無論讀/寫模式如何,文件或目錄被關閉

open

文件或目錄被打開

moved_to

文件或目錄被移動至監控目錄

moved_from

文件或目錄從監控目錄移動至當前目錄

move

文件或目錄移動至監控目錄或從監控目錄移動至當前目錄

move_self

被監控的文件或目錄被移動

create

在監控目錄中創建文件或目錄

delete

在監控目錄中刪除文件或目錄

delete_self

文件或目錄被刪除

umount

包含文件或目錄的文件系統被卸載

11、web節點測試inotifywait事件監控:

(1)創建文件:

第一個終端:# inotifywait -mrq --timefmt '%y/%m/%d %H:%M' --format '%T %w%f' -e create /tmp

image.png

第二個終端:# touch /tmp/a.txt

第一個終端:

image.png

Ctrl + c

(2)刪除文件:

第一個終端:# inotifywait -mrq --timefmt '%F %T' --format '%T %w%f %e' -e delete /tmp

image.png

第二個終端:# rm -f /tmp/a.txt

第一個終端:

image.png

Ctrl + c

備註:因爲inotifywait監控時,終端處於阻塞狀態,所以要開啓兩個終端進行測試

12、web節點測試同步數據至backup節點:

(1)web節點tmp目錄下的所有文件和目錄同步至backup節點/data/nginx目錄:

# rsync -avz --password-file=/etc/.rsync.passwd /tmp/ [email protected]::nginx

(2)web節點整個tmp目錄同步至backup節點/data/nginx目錄:

# rsync -avz --password-file=/etc/.rsync.passwd /tmp rsync://[email protected]/nginx

備註:無需在命令中寫明/data/nginx目錄,已在[nginx]模塊中定義了path參數,且“用戶名@地址::模塊名”和“rsync://用戶名@地址/模塊名”兩種表示方式均可

13、web節點編寫同步腳本:

# mkdir -pv /scripts

# cd /scripts

# vim rsync_backup.sh

#!/bin/bash

SRCDIR=/usr/share/nginx/html

DSTIP="192.168.0.121"

MODULENAME=nginx

USERNAME=ryuser

PWDFILE=/etc/.rsync.passwd

EXCDIR=/scripts/rsync_exclude.txt

/usr/local/inotify-tools/bin/inotifywait -mrq --timefmt '%F %T' --format '%T %w%f %e' -e attrib,create,delete,modify,move $SRCDIR | while true

do

for ip in $DSTIP

do

/usr/local/rsync/bin/rsync -azL --delete --exclude-from=$EXCDIR --password-file=$PWDFILE $SRCDIR/ $USERNAME@$ip::$MODULENAME

done

done

# chmod +x rsync_backup.sh

# touch rsync_exclude.txt

# nohup ./rsync_backup.sh &

# jobs

image.png

備註:

(1)DSTIP中如果包含多個目標IP,用空格分隔;

(2)EXCDIR表示不需要同步的目錄,如果有多個,每一行寫一個目錄,使用相對於同步模塊的路徑,比如不需要同步/usr/share/nginx/html目錄下的a目錄,還有b目錄下的c目錄,/scripts/rsync_exclude.txt文件可寫成:

a/

b/c/

(3)此處/scripts/rsync_exclude.txt文件內容爲空;

(4)jobs命令查看系統中正在執行的任務列表和任務狀態,終止備份腳本可使用命令# pkill rsync

14、測試同步:

(1)創建文件:

web節點創建文件,並修改文件屬性:

# cd /usr/share/nginx/html

# echo "error" > error.html

# chmod 777 error.html

image.png

backup節點查看:

image.png

(2)刪除文件:

web節點刪除文件:

# rm -rf 404.html 50x.html nginx-logo.png poweredby.png

image.png

backup節點查看:

image.png

15、web節點配置同步腳本開機啓動:

# echo "nohup /scripts/rsync_backup.sh &" >> /etc/rc.d/rc.local

# chmod +x /etc/rc.d/rc.local

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章