Linux下通过源码包编译安装Unison时,需要用到ObjectiveCamlcompiler。
通过以下方式安装[root@vm1~]#wget[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->‘btendThefield`split’isrequiredbutnotprovidedThefield`choose’isrequiredbutnotprovidedThefield`max_binding’isrequiredbutnotprovidedThefield`min_binding’isrequiredbutnotprovidedThefield`bindings’isrequiredbutnotprovidedThefield`cardinal’isrequiredbutnotprovidedThefield`partition’isrequiredbutnotprovidedThefield`filter’isrequiredbutnotprovidedThefield`exists’isrequiredbutnotprovidedThefield`for_all’isrequiredbutnotprovidedThefield`merge’isrequiredbutnotprovidedThefield`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':Nosuchfileordirectorymake:[doinstall]Error1(ignored)cpunison/root/bin/cp:cannotcreateregularfile'/root/bin/':Isadirectorymake:***[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#Unisonpreferencesfileroot=/logsroot=ssh://root@192.168.8.9//logs#force=ignore=Pathtestignore=Pathtest1batch=true#repeat=1#retry=3owner=truegroup=trueperms=-1fastcheck=truersync=falsesshargs=-Cconfirmbigdel=falsexferbycopying=truelog=truelogfile=/root/.unison/unison.log主机B的unison配置文件
root=/logsroot=ssh://root@192.168.8.8//logs#force=ignore=Pathtestignore=Pathtest1batch=true#repeat=1#retry=3owner=truegroup=trueperms=-1fastcheck=truersync=falsesshargs=-Cconfirmbigdel=falsexferbycopying=truelog=truelogfile=/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.shwhiletrue;do/usr/local/bin/unisonsleep3done相隔三秒同步一次[root@centos1.unison]chmod+xunison.sh[root@centos1.unison]nohupshunison.sh&由于源码与图片太多所以日志增长的很快所以写清除脚本[root@nginxshell]#viclear.shcat/dev/null>/root/.unison/nohup.outcat/dev/null>/root/.unison/unison.log添加定时任务**/2***/shell/clear.sh每隔两个小时清理一次日志文件Unison双向同步基本原理是:假如有AB两个文件夹,A文件夹把自己的改动同步到B,B文件夹也把自己的改动同步到A,最后AB两文件夹的内容相同,是AB文件夹的合集.
Unison双向同步的一个缺点是,对于一个文件在两个同步文件夹中都被修改时,unison是不会去同步的,因为unison无法判断以那个为准