[rsync+inotify]——監控客戶端檔案變化,rsync同步到伺服器

Jelly_lyj發表於2017-03-18

關於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

 

相關文章