unison+inotify實現web資料雙向同步

2012013977發表於2017-08-23
一:配置環境
伺服器A:192.168.199.132

伺服器B:192.168.199.131


二:unison、inotify簡介
1)Unison是一款跨windows/linux/MAC OS平臺的檔案同步工具,不僅支援本地對本地同步,也支援通過SSH、RSH和Socket等網路協議進行同步。更棒的是,Unison支援雙向同步操作,你既可以從A同步到B,也可以從B同步到A,這些都不需要額外的設定。
2)Inotify 是一個 Linux特性,它監控檔案系統操作,比如讀取、寫入和建立。簡單的說它可以監控檔案有沒有發生過變化
三:配置兩臺伺服器的ssh信任(無密碼登入)
有關ssh信任這部分的配置我已經單獨列為一章,參考:
http://blog.csdn.net/nianzhi1202/article/details/77488737
四:分別在兩臺伺服器上安裝ocaml、unison、inotify
對於三個軟體都是使用編譯安裝,都是下載到/usr/local下(不是必須這個目錄)
1)安裝ocaml
unison的編譯安裝依賴ocaml,官網http://caml.inria.fr/下載,我安裝的是3.10.2
wget http://caml.inria.fr/pub/distrib/ocaml-3.10/ocaml-3.10.2.tar.gz
tar xvf ocaml-3.10.2.tar.gz
cd ocaml-3.10.2
./configure
make world opt
make install
2)安裝unison
yum -y install ctags-etags #安裝依賴包
下載地址:http://www.seas.upenn.edu/~bcpierce/unison/
wget  http://www.seas.upenn.edu/~bcpierce/unison//download/releases/unison-2.32.52/unison-2.32.52.tar.gz
tar xvf unison-2.32.52.tar.gz 
cd unison-2.32.52 
make UISTYLE=text 
#make install會提示錯誤,此錯誤就是要你cp unison /usr/local/bin,因為unison預設是將unison檔案拷貝到/root/bin目錄,但Linux預設沒有該目錄,所以我們需要將生成的可執行檔案unison複製到系統PATH目錄。
make install 
cp unison /usr/local/bin
3)安裝inotify
wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz 
tar xf inotify-tools-3.14.tar.gz 
cd inotify-tools-3.14 
./configure --prefix=/usr/local/inotify && make && make install 
cd /usr/local/inotify/ 
#修改PATH環境變數 
echo "PATH=/usr/local/inotify/bin:$PATH" >/etc/profile.d/inotify.sh 
source /etc/profile.d/inotify.sh #重新整理
#新增庫檔案到系統識別的路徑 
echo "/usr/local/inotify/lib" >/etc/ld.so.conf.d/inotify.conf 
ldconfig -v | grep inotify 
/usr/local/inotify/lib: 
    libinotifytools.so.0 -> libinotifytools.so.0.4.1 
#連結庫檔案到系統識別的路徑 ,如圖
ln -sv /usr/local/inotify/include/ /usr/include/inotify 

`/usr/include/inotify' -> `/usr/local/inotify/include/'


到此所需的軟體都已安裝完畢,可以在A伺服器上執行這個命令,來檢視兩臺伺服器之間是否可以同步檔案,unison -batch /data/ ssh://192.168.199.131//data
五:編unison實時同步指令碼
1)在A上建立指令碼/root/inotify.sh(chmod a+x /root/inotify.sh)

#/bin/bash
ip2="192.168.199.131"
src2="/data"
dst2="/data"
/usr/local/inotify/bin/inotifywait -mrq -e create,delete,modify,move $src2 | while read line; do
/usr/local/bin/unison -batch $src2 ssh://$ip2/$dst2
echo -n "$line " >> /var/log/inotify.log
echo `date | cut -d " " -f1-4` >> /var/log/inotify.log
done 
2)在B上建立指令碼/root/inotify.sh(chmod a+x /root/inotify.sh)
#/bin/bash 
ip1="192.168.199.132"
src1="/data/"
dst1="/data/"
/usr/local/inotify/bin/inotifywait -mrq -e create,delete,modify,move $src1 | while read line; do
/usr/local/bin/unison -batch $src1 ssh://$ip1/$dst1
echo -n "$line " >> /var/log/inotify.log
echo `date | cut -d " " -f1-4` >> /var/log/inotify.log
done

執行指令碼:sh /root/inotify.sh,檢視同步情況

3)新增到/etc/rc.local實現開機自啟動
編輯“/etc/rc.local”,把啟動程式的shell命令輸入進去即可(要輸入命令的全路徑)
使用命令 vi  /etc/rc.local   
然後在檔案最後一行新增要執行程式的全路徑。
例如,每次開機時要執行一個haha.sh,這個指令碼放在/root下面,那就可以在“/etc/rc.local”中加一行“/root/./inotify.sh”

參考1:http://www.jb51.net/article/41600.htm

參考2:http://blog.csdn.net/heidou_2016/article/details/52001756

參考3:http://blog.csdn.net/xuxile/article/details/53927166

相關文章