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