公司的6台tomcat服务器内的东西是一样的,每次传索引的时候都特别麻烦,偶尔疏忽的话,内容是不一样的。本文将介绍rsync_inotify结合实现文件的实时同步。
      对于网上的大部分类似文章,每次做实验都达不到我想要的结果,要么是同步目录不一样,要么不能同时同步多个目录和多台机器。本文将很好的解决这个问题,
      这种配置在公司生产平台上跑了半个月,没有出现任何问题,效果很好,节省好多时间和不必要的麻烦。
   
开始:
前提:配置机器的信任关系,这个很简单,网上有很多类似文章,这里不多介绍
安装inotify 这里采用的是rpm的方式安装的,很简单 rpm -ivh inotify-tools-3.13-1.i386.rpm  它依赖inotify-tools-devel-3.13-1.i386.rpm
安装完成。
 
notif 可以监视的文件系统事件包括:
IN_ACCESS ,即文件被访问
   IN_MODIFY ,文件被 write
   IN_ATTRIB ,文件属性被修改,如 chmod chown touch
   IN_CLOSE_WRITE ,可写文件被 close
   IN_CLOSE_NOWRITE ,不可写文件被 close
   IN_OPEN ,文件被 open
   IN_MOVED_FROM ,文件被移走 , mv
   IN_MOVED_TO ,文件被移来,如 mv cp
   IN_CREATE ,创建新文件
   IN_DELETE ,文件被删除,如 rm
   IN_DELETE_SELF ,自删除,即一个可执行文件在执行时删除自己
   IN_MOVE_SELF ,自移动,即一个可执行文件在执行时移动自己
   IN_UNMOUNT ,宿主文件系统被 umount
   IN_CLOSE ,文件被关闭
IN_MOVE ,文件被移动
 
相关参数:
--timefmt 时间的格式
   --format 输出的格式
   -m 保持一直监听
   -r 是递归查看目录
   -q 是打印出事件
   -e 监听的事件
 
 
配置脚本:
 
vi rsync.sh
 
 
#!/bin/sh

#set -x

src="/a /b"                                # 同步的2个目录

des_ip="*.*.*.*  *.*.*.*"                # 同步目的 IP

#function

inotify_fun ()

{

/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y-%H:%M' --format '%T %w%f' \

-e modify,delete,create,move $1|while read time file    # 监视、递归
do

for ip in $des_ip                                                                         # 轮询同步

do

echo "`date +%Y%m%d-%T`: rsync -avzq --delete --exclude=/a/c --partial --progress $1 $ip:`dirname $1`"

rsync -avzq --delete --exclude=/a/c --partial --progress $1 $ip:`dirname $1`

echo                                                                                                       # 排除目录

done

done

}

#main

for a in $src

do

inotify_fun $a &

done

 
 
执行方式:nohup
在当前目录下新建start-rsync.sh
内容为 nohup ./rsync.sh &
这样我们可以通过nohup.out实时跟踪文件传递情况,同步也可以实时在后台进行。别忘了给脚本加权限
将 start-rsync.sh加入到/etc/rc.local开机启动
配置完成