unison+inotify實現web資料雙向同步
一:配置環境
伺服器A:192.168.199.132
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
五:編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
伺服器A:192.168.199.132
伺服器B:192.168.199.131
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/'
五:編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”
參考2:http://blog.csdn.net/heidou_2016/article/details/52001756
相關文章
- 雙向資料繫結實現原理
- javascript實現雙向資料繫結JavaScript
- ogg在異構資料庫實時雙向同步中如何防止資料死迴圈同步資料庫
- js 實現vue的雙向資料繫結JSVue
- vue資料雙向繫結的實現原理Vue
- 利用python實現mysql資料庫向sqlserver的同步PythonMySql資料庫Server
- 在winform中如何實現雙向資料繫結?ORM
- 資料結構(雙向連結串列的實現)資料結構
- 資料結構-雙向連結串列(Python實現)資料結構Python
- 基於vue實現的雙向資料繫結Vue
- JavaScript實現簡單的雙向資料繫結JavaScript
- 通過原生js實現資料的雙向繫結JS
- 手動簡單實現Vue雙向資料繫結Vue
- 手動實現vue元件間的雙向資料繫結Vue元件
- gRPC雙向資料流的互動控制(go語言實現)| gRPC雙向資料流的互動控制系列(1)RPCGo
- 原生 Redis 跨資料中心雙向同步最佳化實踐Redis
- 深入理解 Object.defineProperty 及實現資料雙向繫結Object
- 實現雙向連結串列
- Vue雙向繫結實現Vue
- 資料庫同步利器 otter 雙A同步配置資料庫
- 如何在原生微信小程式中實現資料雙向繫結微信小程式
- Vue 資料雙向繫結實現二級下拉懸浮選單Vue
- 深入理解Proxy 及 使用Proxy實現vue資料雙向繫結Vue
- Go實現雙向連結串列Go
- java實現雙向連結串列Java
- vue實現prop雙向繫結Vue
- JS雙向資料繫結JS
- 從單向到雙向資料繫結
- 簡要實現vue雙向繫結Vue
- NodeJS Https HSM雙向認證實現NodeJSHTTP
- angular雙向繫結簡單實現Angular
- 雙向繫結的極簡實現
- Vue資料雙向繫結原理Vue
- vue雙向資料繫結原理Vue
- 原生js雙向資料繫結JS
- Kafka 叢集如何實現資料同步?Kafka
- Vue 中雙向繫結 Vs 單向資料流Vue
- 雙向連結串列的功能實現(初版
- WPF之AvalonEdit實現MVVM雙向繫結MVVM