介绍篇: Unison是一款跨windows/linux/MAC OS平台的文件同步工具,不仅支持本地对本地同步,也支持通过SSH、RSH和Socket等网络协议进行同步。Inotify可以监控文件系统操作,比如读取、写入和创建等,通过和Unison配合可以做到将数据实时的进行同步。 Unison双向同步基本原理是:假如有A B两个文件夹,A文件夹把自己的改动同步到B,B文件夹也把自己的改动同步到A,最后A B两文件夹的内容相同,是AB文件夹的合集。 Unison双向同步的一个缺点是:对于一个文件在两个同步文件夹中都被修改时,unison是不会去同步的,因为unison无法判断以那个为准。 如果检测到两个文件夹有所不同,unison会提示,让你选择相应的操作。
安装篇: 下载ocaml组件并安装: wget http://caml.inria.fr/pub/distrib/ocaml-4.02/ocaml-4.02.1.tar.gz 下载unison : wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/beta/unison-2.48.1.tar.gz 下载inotify: wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz 安装ocaml组件: tar zxvf ocaml-4.02.1.tar.gz;cd ocaml-4.02.1;./configure;make world opt && make install 安装unison程序: tar zxvf unison-2.48.1.tar.gz;cd unison-2.48.1;make UISTYLE=text make install (make UISTYLE=text 报错时,需要创建/root/bin/文件夹后再运行make install。mkdir /root/bin/;make install;cp unison /root/bin/;cp unison /usr/local/bin/ 报etags错误可以忽略或者安装etags:yum -y install ctags-etags) 编译好的unsion可拷贝到客户端服务器的/usr/local/bin/下使用 安装inotify: tar zxvf inotify-tools-3.14.tar.gz; cd inotify-tools-3.14;./configure ; make && make install 使用篇: 首次运行一次unison使其生成配置文件,命令为:/usr/local/bin/unison 使用脚本实现双向同步: 服务端:配置文件以及脚本信息 [root@mysql-test tmp]# cat /root/.unison/default.prf # Unison preferences file batch = true owner = true group = true perms = -1 #fastcheck = false fastcheck = true rsync = false sshargs = -C xferbycopying = true confirmbigdel = false log = true logfile = /var/log/unison.log maxthreads = 300 #repeat = 1 retry = 3 #ignore = Path /tmp/www.91town.xxx/log/ [root@mysql-test tmp]# cat /tmp/watch.sh #!/bin/bash host1=192.168.0.231 host2=192.168.0.225 host3=192.168.0.232 src=/tmp/www.91town.xxx/ #inotifywait -mrq –timefmt ‘%d/%m/%y %H:%M’ –format ‘%T %w%f%e ‘ -e close_write,delete,create,attrib $src |while read files inotifywait -mrq -e close_write,delete,create,attrib $src |while read files do #/usr/local/bin/unison $src ssh://$host1/$src /usr/local/bin/unison $src ssh://$host2/$src #/usr/local/bin/unison $src ssh://$host3/$src echo “$files” >> /tmp/sh.unison.log echo `date | cut -d ” ” -f1-4` >> /tmp/inotify.log done
客户端:配置文件以及脚本信息 [root@vm4 tmp]# cat /root/.unison/default.prf # Unison preferences file root = /tmp/www.91town.xxx #本地文件夹 root = ssh://root@192.168.0.230//tmp/www.91town.xxx #远程文件夹 batch = true #表示全自动模式,接受并执行默认动作。 owner = true #表示保持同步的文件属主信息。 group = true #表示保持同步的文件属组信息。 perms = -1 #表示保持同步的文件读写权限。 #fastcheck = false fastcheck = true #true表示同步时通过文件的创建时间来比较两地文件;false表示同步时通过比较两地文件内容。 rsync = false #默认值是true,用于激活rsync传输模式。 sshargs = -C #使用ssh的压缩传输方式。 xferbycopying = true #优化传输参数,默认值为true。 confirmbigdel = false #默认值为true,表示当需要同步的两个目录有一个为空时,unison将停止。设置为false可以保证当需要同步的某个目录为空时,unison不会停止运转。 log = true #表示在终端输出运行信息。 logfile = /var/log/unison.log #指定同时输出写入log文件。 maxthreads = 300 #指定同步时最大线程数。 #repeat = 1 #表示间隔1秒后开始一次新的同步检查 #retry = 3 #指定失败重试次数 #path = www #同步指定的子目录及文件,而非整个目录。可以写多个path,如在下面再写一个path = wwwbak。 #ignore = Path WEB-INF/tmp #忽略/wwwroot下面的WEB-INF/tmp目录,即同步时不同步它。注意,这里是”Path”,而不是”path”。
[root@vm4 tmp]# cat /tmp/watch.sh #!/bin/bash src=/tmp/www.91town.xxx/ #inotifywait -mrq –timefmt ‘%d/%m/%y %H:%M’ –format ‘%T %w%f%e ‘ -e close_write,delete,create,attrib $src |while read files inotifywait -mrq -e close_write,delete,create,attrib $src |while read files do unison echo “$files” >> /tmp/sh.unison.log echo `date | cut -d ” ” -f1-4` >> /tmp/inotify.log done
(责任编辑:IT) |