inotify實時無差別同步

Inotify簡介linux

     Inotify是一種強大的、細粒度、異步的文件系統時間監測事件,linux內核從2.6.1git

3起,加入了inotify支持,經過inotify能夠監控文件系統中添加、刪除,修改、移動等各類事件,利用這個內核接口,第三方軟件就能夠監控文件系統下文件的各類變化狀況,而inotify-tools正是實施這樣監控軟件。Inotify實際是一種事件驅動機制,它爲應用程序監控文件系統事件提供了實時響應事件的響應,也沒有輪詢形成的系統資源消耗,是很是天然的時間通知接口,也與天然世界的時間機制相符合。github

  Inotify實際是一種時間驅動機制,它爲應用程序監控文件系統事件提供了實時響應事件的機制,而無須經過諸如cron等的倫旭機制來獲取事件。Cron等機制不只沒法作到實時性,並且消耗大量系統資源,相比之下,inotify基於事件驅動,能夠作到對應事件處理的實時響應,也沒有輪詢形成的系統資源消耗,是很是天然的事件通知接口,也與天然世界的事件機制相符合。shell

安裝inotifyvim

要監控nfsserver下的目錄變化,因此inotify要安裝在客戶端bash

1)、查看當前系統是否支持inotify服務器

#uname -rless

2.6.32-504.el6.x86_64異步

[root@nfsserver /]# ls -l /proc/sys/fs/inotify/ide

total 0

-rw-r--r-- 1 root root 0 Feb  3 17:12 max_queued_events

-rw-r--r-- 1 root root 0 Feb  3 17:12 max_user_instances

-rw-r--r-- 1 root root 0 Feb  3 17:12 max_user_watches

出現這三項表示支持

2)、下載源碼包

 #mkdir -p /home/yankefei/tools 

#cd /home/yankefei/tools/

  # wget  http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

源碼安裝第一步,解壓

#tar zxf inotify-tools-3.14.tar.gz

切到目錄,--prefix表示安裝目錄

[root@nfsserver ~]# cd /home/yankefei/tools/

[root@nfsserver tools]# ls

inotify-tools-3.14  inotify-tools-3.14.tar.gz

[root@nfsserver tools]# cd inotify-tools-3.14

[root@nfsserver inotify-tools-3.14]# ./configure --prefix /usr/local/inotify-tools-3.14

 

[root@nfsserver inotify-tools-3.14]# make && make install

建立軟鏈接,訪問更方便把版本號去掉

#ln s /usr/local/inotify-tools-3.14/ /usr/local/inotify-tools

[root@nfsserver inotify-tools]# ls -l /usr/local/inotify-tools/

total 16

drwxr-xr-x 2 root root 4096 Feb  3 18:02 bin

drwxr-xr-x 3 root root 4096 Feb  3 18:02 include

drwxr-xr-x 2 root root 4096 Feb  3 18:02 lib

drwxr-xr-x 4rootr oot 4096 Feb  3 18:02share

Bin目錄下兩個工具:

   一共安裝了2個工具命令,即inotifywait和inotifywatch

  Inotifywait:在被監控的文件或目錄上等待特定文件系統事件(open、close、delete等發生)執行後處於阻塞狀態,適合在shell腳本中使用。

  Inotifywatch:收集被監視的文件系統使用度統計數據,指文件系統事件發生的次數統計。

Inotify命令經常使用參數詳解

#./bin/inotifywait --help

參數:

 -r|--recursive  watch directories recursively   遞歸查詢目錄

 -q|--quiet  print less(only print events) 打印不多的信息,僅僅打印監控事件信息

 -m|--monitor  keep listening for events forever,without this option,inotifywait will exit after one event isreceived #始終保持事件監聽狀態

-excludei<pattern>  like exclude but case insensitive#排除文件或目錄時,不區分大小寫。

--timefmt<fmt>strftime-compatible-compatible format string for use with %T in format string,指定時間輸出的格式。

--format<fmt> print using a specified format string ;read the man page for more

…………..

 

監控/data 目錄的建立,修改,刪除

#/usr/local/inotify-tools/bin/inotifywait mrq timefmt %d/%m%y %H:%M format %T %w%f e create,close_write,delete /data

實現數據同步企業案列腳本,監控到目錄的變化,而後同步

[root@nfsserver data]# mkdir -p /server/scripts

[root@nfsserver data]# cd /server/scripts

[root@nfsserver scripts]# vim inotify.sh

 

#!/bin/bash

inotify=/usr/local/inotify-tools/bin/inotifywait

$inotify -mrq --format '%w%f' -e create,close_write,delete /data \

|while read file

do

  cd / &&

    rsync -az ./data --delete rsync_backup@192.168.154.145::backup/ \

   --password-file=/etc/rsync.password

Done

網站這樣的兩個服務器最好實時同步的無差別同步但也非必須,腳本指出inotify命令的路徑,而後inotify監控/data目錄,而後經過管道把結果給後面的循環。把整個的data目錄推送過去。在作無差別同步時必須注意,把服務端同步的目錄裏的其餘內容刪掉,這裏是個危險,將被同步的目錄和本本機器的任務目錄分開。註釋&&切換成功以後作推送命令

調試shell

#sh x inotify.sh

[root@nfsserver scripts]# sh -x inotify.sh

+ inotify=/usr/local/inotify-tools/bin/inotifywait

+ read file

+ /usr/local/inotify-tools/bin/inotifywait -mrq --format %w%f -e create,close_write,delete /data

+ cd /

+ rsync -az ./data/ --delete rsync_backup@192.168.154.145::backup --password-file=/etc/rsync.password

+ read file

+ cd /

+ rsync -az ./data/ --delete rsync_backup@192.168.154.145::backup --password-file=/etc/rsync.password

+ read file

調試成功以後將它全路徑放在後臺,爲了開機下次啓動,將它放在rc.local

[root@nfsserver scripts]# /bin/sh /server/scripts/inotify.sh  &

[1] 5498

[root@nfsserver scripts]# vi rc.local

建立3000個文件

  For n in `seq 3000`;do touch yan$n;done

#ls|wc -l

相關文章
相關標籤/搜索