公司的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,文件属性被修改,如 chmodchowntouch
  IN_CLOSE_WRITE,可写文件被 close
  IN_CLOSE_NOWRITE,不可写文件被 close
  IN_OPEN,文件被 open
  IN_MOVED_FROM,文件被移走, mv
  IN_MOVED_TO,文件被移来,如 mvcp
  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开机启动
配置完成