linux下unison雙向數據實時同步

Linux下通過源碼包編譯安裝Unison時,需要用到ObjectiveCamlcompiler。
通過以下方式安裝
[root@vm1~]#wgethttp://caml.inria.fr/pub/distrib/ocaml-3.12/ocaml-3.12.1.tar.gz
[root@vm1~]#tar-xzvfocaml-3.12.1.tar.gz
[root@vm1~]#cdocaml-3.12.1
[[email protected]]#./configure
[[email protected]]#makeworldopt
[[email protected]]#makeinstall

編譯安裝Unison
[root@vm1~]#tar-xzvfunison-2.40.63.tar.gz
[root@vm1~]#cdunison-2.40.63
[[email protected]]#makeUISTYLE=textTHREADS=trueSTATIC=true
執行的時候出現錯誤
valmap:(‘a->‘b)->‘at->‘btvalmapi:(key->‘a->‘b)->‘at->‘btend
Thefield`split’isrequiredbutnotprovided
Thefield`choose’isrequiredbutnotprovided
Thefield`max_binding’isrequiredbutnotprovided
Thefield`min_binding’isrequiredbutnotprovided
Thefield`bindings’isrequiredbutnotprovided
Thefield`cardinal’isrequiredbutnotprovided
Thefield`partition’isrequiredbutnotprovided
Thefield`filter’isrequiredbutnotprovided
Thefield`exists’isrequiredbutnotprovided
Thefield`for_all’isrequiredbutnotprovided
Thefield`merge’isrequiredbutnotprovided
Thefield`singleton’isrequiredbutnotprovidedmake:***[update.cmx]

解決方法:
修改update.mli把第四行的moduleNameMap:Map.Swithtypekey=Name.t改成moduleNameMap:MyMap.Swithtypekey=Name.t

[[email protected]]#makeinstall

在執行makeinstall的過程中,可能會出現以下錯誤提示:
mv:cannotstat'/root/bin//unison':Nosuchfileordirectory
make:[doinstall]Error1(ignored)
cpunison/root/bin/
cp:cannotcreateregularfile'/root/bin/':Isadirectory
make:***[doinstall]Error1

出現錯誤的原因在與Unison默認是將文件Copy到/root/bin目錄,但Linux默認是沒有該目錄的,因此我們需要將生成的可執行文件unison複製到系統的PATH目錄。
[[email protected]]#cpunison/usr/local/bin

在AB兩臺機器上部署ssh無密碼連接,AB兩臺機器上關於unison的安裝過程是一樣的
執行unison命令之後會在根目錄下生成unison隱藏文件
主機A的unison配置文件
[root@centos1~]#cd/root/.unison/
默認有一個default.prfunison的默認配置文件
[[email protected]]#videfault.prf
#Unisonpreferencesfile
root=/logs
root=ssh://[email protected]//logs
#force=
ignore=Pathtest
ignore=Pathtest1
batch=true
#repeat=1
#retry=3
owner=true
group=true
perms=-1
fastcheck=true
rsync=false
sshargs=-C
confirmbigdel=false
xferbycopying=true
log=true
logfile=/root/.unison/unison.log

主機B的unison配置文件
root=/logs
root=ssh://[email protected]//logs
#force=
ignore=Pathtest
ignore=Pathtest1
batch=true
#repeat=1
#retry=3
owner=true
group=true
perms=-1
fastcheck=true
rsync=false
sshargs=-C
confirmbigdel=false
xferbycopying=true
log=true
logfile=/root/.unison/unison.log

配置文件參數
force表示會以本地所指定文件夾爲標準,將該目錄同步到遠端。這裏需要注意,如果指定了force參數,那麼Unison就變成了單項同步了,也就是說會以force指定的文件夾爲準進行同步,類似與rsync。
Unison雙向同步基本原理是:假如有AB兩個文件夾,A文件夾把自己的改動同步到B,B文件夾也把自己的改動同步到A,最後AB兩文件夾的內容相同,是AB文件夾的合集。
Unison雙向同步的一個缺點是,對於一個文件在兩個同步文件夾中都被修改時,unison是不會去同步的,因爲unison無法判斷以那個爲準。
ignore=Path表示忽略指定目錄,即同步時不同步它。
batch=true,表示全自動模式,接受缺省動作,並執行。
fastchecktrue表示同步時僅通過文件的創建時間來比較,如果選項爲false,Unison則將比較兩地文件的內容。
confirmbigdel=false默認爲true遇到空文件夾停止
log=true表示在終端輸出運行信息。
logfile指定輸出的log文件。

另外,Unison有很多參數,這裏僅介紹常用的幾個,詳細的請參看Unison手冊。
auto//接受缺省的動作,然後等待用戶確認是否執行。
batch//batchmode,全自動模式,接受缺省動作,並執行。
ignorexxx//增加xxx到忽略列表中
ignorecase[true|false|default]//是否忽略文件名大小寫
followxxx//是否支持對符號連接指向內容的同步
owner=true//保持同步過來的文件屬主
group=true//保持同步過來的文件組信息
perms=-1//保持同步過來的文件讀寫權限
repeat=1//間隔1秒後,開始新的一次同步檢查
retry=3//失敗重試
sshargs=-C//使用ssh的壓縮傳輸方式
xferbycopying=true"
pathxxx參數//只同步-path參數指定的子目錄以及文件,而非整個目錄,path可以多次出現

在A、B上執行unison開始同步
在AB上自動同步編寫腳本文件
[[email protected]]#viunison.sh
whiletrue;do
/usr/local/bin/unison
sleep3
done
相隔三秒同步一次
[[email protected]]chmod+xunison.sh
[[email protected]]nohupshunison.sh&
由於源碼與圖片太多所以日誌增長的很快所以寫清除腳本
[root@nginxshell]#viclear.sh
cat/dev/null>/root/.unison/nohup.out
cat/dev/null>/root/.unison/unison.log
添加定時任務
**/2***/shell/clear.sh
每隔兩個小時清理一次日誌文件

Unison雙向同步基本原理是:假如有AB兩個文件夾,A文件夾把自己的改動同步到B,B文件夾也把自己的改動同步到A,最後AB兩文件夾的內容相同,是AB文件夾的合集.
Unison雙向同步的一個缺點是,對於一個文件在兩個同步文件夾中都被修改時,unison是不會去同步的,因爲unison無法判斷以那個爲準

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章