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
[root@vm1ocaml-3.12.1]#./configure
[root@vm1ocaml-3.12.1]#makeworldopt
[root@vm1ocaml-3.12.1]#makeinstall

编译安装Unison
[root@vm1~]#tar-xzvfunison-2.40.63.tar.gz
[root@vm1~]#cdunison-2.40.63
[root@vm1unison-2.40.63]#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

[root@vm1unison-2.40.63]#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目录。
[root@vm1unison-2.40.63]#cpunison/usr/local/bin

在AB两台机器上部署ssh无密码连接,AB两台机器上关于unison的安装过程是一样的
执行unison命令之后会在根目录下生成unison隐藏文件
主机A的unison配置文件
[root@centos1~]#cd/root/.unison/
默认有一个default.prfunison的默认配置文件
[root@centos1.unison]#videfault.prf
#Unisonpreferencesfile
root=/logs
root=ssh://root@192.168.8.9//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://root@192.168.8.8//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上自动同步编写脚本文件
[root@centos1.unison]#viunison.sh
whiletrue;do
/usr/local/bin/unison
sleep3
done
相隔三秒同步一次
[root@centos1.unison]chmod+xunison.sh
[root@centos1.unison]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无法判断以那个为准