一、檔案控管機制-Inotify
inotify可以幫助你即時的觀測檔案的改變,並回送通知給你,而inotify把檔案狀態的變化分為以下:
IN_ACCESS,即檔案被存取
IN_MODIFY,文件被 write
IN_ATTRIB,檔案屬性被修改,如 chmod、chown、touch 等
IN_CLOSE_WRITE,可寫文件被 close
IN_CLOSE_NOWRITE,不可寫文件被 close
IN_OPEN,文件被 open
IN_MOVED_FROM,文件被移走,如 mv
IN_MOVED_TO,文件被移來,如 mv、cp
IN_CREATE,創建新文件
IN_DELETE,檔被刪除,如 rm
IN_DELETE_SELF,自刪除,即一個可執行檔在執行時刪除自己
IN_MOVE_SELF,自移動,即一個可執行檔在執行時移動自己
IN_UNMOUNT,宿主檔案系統被 umount
IN_CLOSE,文件被關閉,等同於(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
IN_MOVE,文件被移動,等同於(IN_MOVED_FROM | IN_MOVED_TO)
IN_MODIFY,文件被 write
IN_ATTRIB,檔案屬性被修改,如 chmod、chown、touch 等
IN_CLOSE_WRITE,可寫文件被 close
IN_CLOSE_NOWRITE,不可寫文件被 close
IN_OPEN,文件被 open
IN_MOVED_FROM,文件被移走,如 mv
IN_MOVED_TO,文件被移來,如 mv、cp
IN_CREATE,創建新文件
IN_DELETE,檔被刪除,如 rm
IN_DELETE_SELF,自刪除,即一個可執行檔在執行時刪除自己
IN_MOVE_SELF,自移動,即一個可執行檔在執行時移動自己
IN_UNMOUNT,宿主檔案系統被 umount
IN_CLOSE,文件被關閉,等同於(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
IN_MOVE,文件被移動,等同於(IN_MOVED_FROM | IN_MOVED_TO)
首先查看系統是否支持inotify,看看是否有
/proc/sys/fs/inotify/目錄,以確定內核是否支援inotify
#ls /proc/sys/fs/inotify/
二、安裝rsync 與inotify-tools
#yum install rsync
#wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
#tar zxvf inotify-tools-3.14.tar.gz
#./configure --prefix=/xxx/xxx
#make
#make install
如果執行inotifywait時,提示缺少libinotifytools.so.0,請將libinotifytools.so.0複製到/lib下即可
三、撰寫即時同步script及測試
測試環境為即時監控172.16.2.8:/home/jacky目錄並同步至172.16.2.49:/home
先讓ssh登入免密碼,在172.16.2.8下
然後將以下紅色代碼存成script
###############################################################
#!/bin/bash
src=/home/jacky
ip=172.16.2.49
des=/home/
/usr/local/bin/inotifywait
-mrq --timefmt '%d/%m/%y %H:%M' --format
'%T %w%f' \
-e modify,delete,create,attrib ${src} \
| while read file
do
rsync -avz --delete --progress
${src} root@${ip}:${des} &&
echo "${file} was
rsynced"
echo
"---------------------------------------------------------------------------"
done
#################################################################
script運行後,來源172.16.2.8:/home/jacky內檔案有任何變動即會同步172.16.2.49:/home/
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' \
-e modify,delete,create,attrib
${src} \
該段指令返回值類似於:
10/09/12 19:15 /home/jacky/xxx
三個返回值會做為參數傳給read,觸發rsync指令
rsync 參數說明
-a, --archive 歸檔模式,表示以遞迴方式傳輸檔,並保持所有檔案屬性
-v, --verbose 詳細模式輸出
-z, --compress 對備份的檔在傳輸時進行壓縮處理
--delete 刪除那些DST中SRC沒有的檔
--progress 在傳輸時顯示傳輸過程
inotifywait 相關參數可用man查看