inotify + rsync 實時同步
下載inotify
wget https://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
安裝:
[[email protected] ~]# tar -zxvf inotify-tools-3.14.tar.gz ##解壓文件
[[email protected] ~]# cd inotify-tools-3.14 ##進入inotify裏面
[[email protected] inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify-tools-3.14 #定義他的安裝目錄
------------------------
查看上一個命令是否執行成功,若執行成功,返回0,若執行出錯則返回其他數字。
-----------------------
[[email protected] inotify-tools-3.14]# make && make install ##開始執行 安裝,若執行不出錯,即表示安裝完成。
inotifywait 單獨分析
[[email protected] ~]#/usr/local/inotify-tools-3.14/bin/inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w%f‘ -e close_write,delete,create,attrib /data1
#執行上面命令,是讓inotifywait監聽/data1/目錄,當監聽到有發生close_write,delete,create,attrib等事件發生時,按%d/%m/%y %H:%M %w%f的格式輸出。
inotifywait 參數說明
參數名稱 | 參數說明 |
-m,–monitor | 始終保持事件監聽狀態 |
-r,–recursive | 遞歸查詢目錄 |
-q,–quiet | 只打印監控事件的信息 |
–excludei | 排除文件或目錄時,不區分大小寫 |
-t,–timeout | 超時時間 |
–timefmt | 指定時間輸出格式 |
–format | 指定時間輸出格式 |
-e,–event | 後面指定刪、增、改等事件 |
inotifywait events事件說明
事件名稱 | 事件說明 |
access | 讀取文件或目錄內容 |
modify | 修改文件或目錄內容 |
attrib | 文件或目錄的屬性改變 |
close_write | 修改真實文件內容 |
close_nowrite | |
close | |
open | 文件或目錄被打開 |
moved_to | 文件或目錄移動到 |
moved_from | 文件或目錄從移動 |
move | 移動文件或目錄移動到監視目錄 |
create | 在監視目錄下創建文件或目錄 |
delete | 刪除監視目錄下的文件或目錄 |
delete_self | |
unmount | 卸載文件系統 |
-----------------實現實時同步的腳本------------------------------------
#!/bin/bash
#para
##目標主機的IP
hostip=192.168.2.185
##需要監控同步的目錄
src=/data1
##目標主機的模塊(/etc/rsyncd.conf裏面的模塊)
dst=zhuzhiwei
##rsync的別名用戶
user=zzw
##rsync的密碼文件存放位置
rsync_passfile=/etc/rsync.password
##inotify工具的位置
inotify_home=/usr/local/inotify-tools-3.14/
######judge(以下內容是檢查上面的命令是否正確,可以不寫)
if [ ! -e "$src" ] \
|| [ ! -e "${rsync_passfile}" ] \
|| [ ! -e "${inotify_home}/bin/inotifywait" ] \
|| [ ! -e "/usr/bin/rsync" ];
then
echo "Check File and Folder"
exit 9
fi
#############################
${inotify_home}/bin/inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w%f‘ -e close_write,delete,create,attrib $src \
| while read file
do
#rsync -avzP --delete --timeout=100 --password-file=${rsync_passfile} $src [email protected]::$dst >/dev/null 2>&1
cd $src && rsync -aruz -R --delete ./ --timeout=100 $user@$hostip::$dst --password-file=${rsync_passfile} >/dev/null 2>&1
done
exit 0
####相關腳本可參考:http://www.cnblogs.com/jackyyou/p/5681126.html
---------------------------------------------------------------------------------
優化 Inotify
# 在/proc/sys/fs/inotify目錄下有三個文件,對inotify機制有一定的限制
1 2 3 4 5 | [[email protected] ~]# ll /proc/sys/fs/inotify/ 總用量0 -rw-r--r--1 root root 09月923:36 max_queued_events -rw-r--r--1 root root 09月923:36 max_user_instances -rw-r--r--1 root root 09月923:36 max_user_watches |
-----------------------------
max_user_watches #設置inotifywait或inotifywatch命令可以監視的文件數量(單進程)
max_user_instances #設置每個用戶可以運行的inotifywait或inotifywatch命令的進程數
max_queued_events #設置inotify實例事件(event)隊列可容納的事件數量
----------------------------
[[email protected] ~]# echo 50000000>/proc/sys/fs/inotify/max_user_watches -- 把他加入/etc/rc.local就可以實現每次重啟都生效
[[email protected] ~]# echo 50000000>/proc/sys/fs/inotify/max_queued_events
更多實時同步工具:http://oldboy.blog.51cto.com/2561410/1216457
inotify+rsync實時數據同步實戰操作講解:
http://oldboy.blog.51cto.com/2561410/1111439
本文出自 “Zack” 博客,請務必保留此出處http://zhuzhiwei.blog.51cto.com/8446194/1947821
inotify + rsync 實時同步