目錄:
相關概念
編譯安裝rsync
rsync簡單使用示例
rsync + crontab實現文件定時同步,併發送郵件提醒
rsync daemon + inotify實現文件實時同步
1、rsync:remote 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:可在命令行下提供對文件系統事件的監控,包括inotifywait和inotifywatch兩個命令行工具,下載地址https://github.com/inotify-tools/inotify-tools/releases。
(1)inotifywait:在被監控的目錄或文件中等待特定文件系統事件(如open、close、delete等)發生,執行後處於阻塞狀態;
(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.7中yum安裝的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
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目錄下的a、b文件同步至test2目錄:
# rsync -avz /test1/{a,b} /test2
2、將test1目錄下的c目錄同步至test2目錄:
# rsync -avz /test1/c /test2
3、假設test1目錄下有a、b、c三個文件,test2目錄下有a、d兩個文件和e一個目錄,保證test2目錄內容與test1一致:
# rsync -avz --delete /test1/ /test2/
4、假設test1目錄下有a、b、c、d、e五個文件,test2目錄爲空目錄,除了b、d以外的test1目錄下的所有文件都同步至test2目錄:
# rsync -avz --exclude={b,d} /test1/ /test2/
5、假設test1目錄下有a、b、c、d、e五個文件,test2目錄下有x、y、z三個目錄,除了b、d以外的test1目錄下的所有文件都同步至test2目錄,且刪除test2目錄下的x、y、z三個目錄:
# 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)兩個節點關閉firewalld和SELinux;
(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 smtp=smtp.qq.com
set smtp-auth-password=QQ郵箱授權碼
set smtp-auth=login
# echo "Hello World" | mail -s "test" [email protected]
(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節點:
backup節點:
收取郵件:
(2)創建文件:
web節點創建文件:# echo "error" > error.html
backup節點查看:
收取郵件:
備註:爲了演示效果,將任務計劃時間間隔調整爲3分鐘
(3)刪除文件:
web節點刪除文件:# rm -rf 404.html 50x.html nginx-logo.png poweredby.png
backup節點查看:
五、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)兩個節點關閉firewalld和SELinux;
(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
備註:
(1)如果顯示max_queued_events、max_user_instances和max_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
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 | 僅打印監控事件信息 |
不打印任何信息 | |
--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
第二個終端:# touch /tmp/a.txt
第一個終端:
Ctrl + c
(2)刪除文件:
第一個終端:# inotifywait -mrq --timefmt '%F %T' --format '%T %w%f %e' -e delete /tmp
第二個終端:# rm -f /tmp/a.txt
第一個終端:
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
備註:
(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
backup節點查看:
(2)刪除文件:
web節點刪除文件:
# rm -rf 404.html 50x.html nginx-logo.png poweredby.png
backup節點查看:
15、web節點配置同步腳本開機啓動:
# echo "nohup /scripts/rsync_backup.sh &" >> /etc/rc.d/rc.local
# chmod +x /etc/rc.d/rc.local