使用unison 同步文件

一、系统环境
192.168.1.2:

# uname -a
Linux s2 2.6.18-128.el5 #1 SMP Wed Dec 17 11:42:39 EST 2008 i686 i686 i386 GNU/Linux
# lsb_release -a
LSB Version:    :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID: #RedHatEnterpriseServer
Description:    #Red Hat Enterprise Linux Server release 5.3 (Tikanga)
Release:    5.3
Codename:   Tikanga

#已安装etags

192.168.1.23

# uname -a
Linux localhost.localdomain 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost 2.61]# lsb_release -a
LSB Version:    :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description:    CentOS release 6.5 (Final)
Release:    6.5
Codename:   Final

#未安装etags,需用yum安装

已配置双机ssh信任。(略去配置过程)



二、安装ocaml-3.10.2

# tar zxvf ocaml-3.10.2.tar.gz 
# cd ocaml-3.10.2
##需删除man1,不然会报错
# rm -rf /usr/local/man/man1
#  ./configure 
# make world opt
# make install

三、安装unison-2.32.52

# tar zxvf unison-2.32.52.tar.gz
# cd unison-2.32.52
#  make UISTYLE=text THREADS=true STATIC=true
# cp unison /usr/local/bin/

四、测试连通性

# unison / ssh://192.168.1.23/ -testserver



五、示例

# vim /root/.unison/1.2_ftp.prf
#2016-05-17
#back up /var/ftp/pub to 192.168.1.23:/home/databack/1.2_ftp 
root = /var/ftp/pub
#root = /tmp/unison2
root = ssh://root@192.168.1.23//home/databack/1.2_ftp
force = /var/ftp/pub
#force = /tmp/unison2
batch = true
maxthreads = 100
#repeat = 10
retry = 3
owner = true
group = true
times = true
perms = -1
fastcheck = false
rsync = false
sshargs = -C
xferbycopying = true
confirmbigdel = false
log = true
logfile = /root/.unison/1.2_ftp.log


## 默认读取配置文件目录:/root/.unison或~/.unison

#/usr/local/bin/unison 1.2_ftp


六、让其每隔一段时间自动同步
1.crontab

注释repeat参数
#repeat = 10
0 8,10,12,14,16,18 * * 1-5 /usr/local/bin/unison 1.2_ftp

2.使用其repeat参数

开启repeat参数,每小时同步
repeat = 3600
nohup /usr/local/bin/unison 1.2_ftp >> /tmp/1.2.log &
开机启动
vim /etc/rc.local
nohup /usr/local/bin/unison 1.2_ftp >> /tmp/1.2.log &


七、unison参数详解(网络)


    -testserver

    测试连通性,连接到服务器即退出。示例:

   

 # unison / ssh://root@192.168.1.23/ -servercmd=/usr/local/bin/unison -testserver


    如果服务器端 unison 可执行文件不在默认目录下,甚至没有 unison 命令(需要你编译一个上传到服务器),则需要使用 -servercmd 参数告诉要执行的服务器 unison 命令位置。

    使用 -testserver 参数,则成功链接即退出,也不会去执行目录的比较等后续操作。

    -servercmd xxx

    告诉 unison, 服务器端的 unison 命令是什么。参见上面的示例。

    -auto

    接受缺省的动作,然后等待用户确认是否执行。

    -batch

    batch mode, 全自动模式,接受缺省动作,并执行。

    -ignore xxx

    增加 xxx 到忽略列表中

    -ignorecase [true|false|default]

    是否忽略文件名大小写

    -follow xxx

    是否支持对符号连接指向内容的同步;

    例如在我的 ~/.unison 的配置文件 default.prf 中有

    # Unison preferences file follow = Path {unison_*} ignore = Path {WWWROOT/wiki_mirror} ignore = Name {,.}*{.~$lock} ignore = Name {a.out}


    我将预进行同步的系统文件在 xxx/src 下分别作符号链接,如 unison_httpd.conf 指向 c:/program files/apache/.../httpd.conf。 同步时,"follow = Path {unison_*}" 配置(或参数)将跟踪符号链接指向的实际文件。 如果没有该设置,符号链接不予同步。

    -immutable xxx

    不变目录,扫描时即忽略

    -silent

    安静模式

    -times

    同步修改时间

    -path xxx 参数

    只同步 -path 参数指定的子目录以及文件,而非整个目录。例如

    unison /home/username ssh://remotehost//home/username \ -path shared \ -path pub \ -path .netscape/bookmarks.html