關於rsync的配置請參考博文:http://www.cnblogs.com/snsdzjlz320/p/5630695.html
實驗環境
(1) Rsync伺服器:10.0.10.158
(2) Rsync客戶端:10.0.10.173
Inotify都在客戶端配置
1.檢視系統是否支援inotify
# ls /proc/sys/fs/inotify/ max_queued_events max_user_instances max_user_watches #這些值一般不去修改但在監控的檔案數量較大時要根據需求調整 # cat /proc/sys/fs/inotify/max_queued_events #設定inotify例項事件(event)佇列可容納的事件數量 16384 # cat /proc/sys/fs/inotify/max_user_instances #設定每個使用者可以執行的inotifywait或inotifywatch命令的程式數 128 # cat /proc/sys/fs/inotify/max_user_watches #設定inotifywait或inotifywatch命令可以監視的檔案數量(單程式) 8192
2.安裝inotify
# tar xvf inotify-tools-3.14.tar.gz # cd inotify-tools-3.14 # ./configure --prefix=/usr/local/inotify # make –j 2 # make install
3.設定系統環境變數
# vim /etc/profile PATH=“$PATH:/usr/local/inotify/bin” #在檔案中新增這行 # source /etc/profile # vim /etc/ld.so.conf /usr/local/inotify/lib #在檔案中新增這行 # ldconfig
inotify工具與使用
# ls /usr/local/inotify/bin/ inotifywait inotifywatch
inotifywait
inotifywait用於等待檔案或檔案集上的一個特定事件,它可以監控任何檔案和目錄設定,並且可以遞迴地監控整個目錄樹。
inotifywatch
用於收集被監控的檔案系統統計資料,包括每個inotify事件發生多少次等資訊。
inotifywait常用選項
-m,--monitor 表示始終保持事件監聽狀態
-r ,--recursive 表示遞迴查詢目錄
-q ,--quiet 表示列印出監控事件
-e ,--event 通過此引數可以指定要監控的事件
Inotifywait支援的事件型別
access 檔案讀取
modify 檔案更改
attrib 檔案屬性更改,如許可權,時間戳等
close_write 以可寫模式開啟的檔案被關閉,不代表此檔案一定已經寫入資料
close_nowrite 以只讀模式開啟的檔案被關閉
close 檔案被關閉,不管它是如何開啟的
open 檔案開啟
moved_to 一個檔案或目錄移動到監聽的目錄,即使是在同一目錄內移動,此事件也觸發
moved_from 一個檔案或目錄移出監聽的目錄,即使是在同一目錄內移動,此事件也觸發
move 包括moved_to和 moved_from
move_self 檔案或目錄被移除,之後不再監聽此檔案或目錄
create 檔案或目錄建立
delete 檔案或目錄刪除
delete_self 檔案或目錄移除,之後不再監聽此檔案或目錄
unmount 檔案系統取消掛載,之後不再監聽此檔案系統
--timefmt
%Y 表示年份
%m 表示月份
%d 表示天數
%H 表示小時
%M 表示分鐘
--format
%w 表示發生事件的目錄
%f 表示發生事件的檔案
%e 表示發生的事件
%Xe 事件以“X”分隔
%T 使用由–timefmt定義的時間格式
Rsync+Inotify連續監控指令碼
# vim /usr/local/inotify/bin/webroot-bk.sh #!/bin/bash webserver=10.0.10.158 src="/var/www/html/" dst1="webroot" username=admin /usr/local/inotify/bin/inotifywait -mrq --timefmt '%y-%m-%d %H:%M' \ --format '%T%w%f%e' -e close_write,delete,create,attrib ${src} \ | while read files do rsync -vzrtopg --delete --progress --password-file=/etc/rsync/password $src $username@$webserver::$dst1 &>/dev/null && echo "${files} was rsynced" &>> /var/log/rsyncd.log || echo "Error: ${files} not rsynced" &>> /var/log/rsyncd.log done
執行與驗證
# ./webroot-bk.sh & #指令碼放在後臺執行 [1] 6559 # cd /var/www/html/ # ls haha index.html new.html page_2.html page.html # touch inotify_new.html #客戶端上新建檔案 # cat /var/log/rsyncd.log #檢視日誌 16-06-30 16:11/var/www/html/inotify_new.htmlCREATE was rsynced 16-06-30 16:11/var/www/html/inotify_new.htmlATTRIB was rsynced 16-06-30 16:11/var/www/html/inotify_new.htmlCLOSE_WRITE,CLOSE was rsynced # mkdir /var/www/html/test_inotify #客戶端上新建目錄 # cat /var/log/rsyncd.log 16-06-30 16:11/var/www/html/inotify_new.htmlCREATE was rsynced 16-06-30 16:11/var/www/html/inotify_new.htmlATTRIB was rsynced 16-06-30 16:11/var/www/html/inotify_new.htmlCLOSE_WRITE,CLOSE was rsynced 16-06-30 16:21/var/www/html/test_inotifyCREATE,ISDIR was rsynced
# ls /var/www/html/ #回到伺服器上看是不是已經同步了 haha index.html inotify_new.html new.html new_inotify.html page_2.html page.html secret test_inotify