1. 程式人生 > >inotify + rsync 實時同步

inotify + rsync 實時同步

linux系統管理、數據同步方案

下載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 實時同步