将inotifywait + rsync 实时同步的方案做了一个集成,为了减少重复劳动,减少新手配置难度,所以打包成一个标准的rpm包。


取名realsync,纯属瞎编,意为real-time rsync,如有雷同,实属巧合。在CentOS 6 平台上经过测试,运行良好。


通过简单的两行配置即可实现单向实时同步,具体配置文件是/etc/sysconfig/realsync


1
2
3
4
5
6
7
8
9
######################################
# local directory to monitor.
# example: local_dir="/etc/"
local_dir= " "
# remote directory to sync,
# which should be a writable rsync server.
# example: remote_dir="192.168.1.2::data/"
remote_dir= " "
######################################

如果没有配置上面两个变量,启动会失败。


安装好后,默认加入开机启动,取消开机启动办法

1
chkconfig realsync off


init脚本支持4个参数:

1
2
3
4
service realsync start
service realsync stop
service realsync restart
service realsync status


跟网上其他教程的区别:

1、其他教程一般都是一条命令inotifywait + 管道+ while循环,

参考:http://lxw66.blog.51cto.com/5547576/1331048

这样缺乏灵活性,不能像服务一样随时停止和启动,比较丑陋。


2、本文的办法

a。让inotifywait在后台将监控结果写入文件

b、用while循环监视文件是否为空,如果非空,则执行rsync

c、如果锁文件不在,则停止循环。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/env bash
 
set  -e
 
/etc/sysconfig/realsync
 
logsize=` /usr/bin/stat  -c %s $logfile`
 
/usr/bin/inotifywait  \
         -mrqsd \
         --timefmt  '%d/%m/%y %H:%M'  \
         -- format  '%T %w%f%e'  \
         --event close_write,modify,create,attrib \
         --outfile $logfile $local_dir
 
while  [ $logsize -gt  "0"  ]; do
         [ -e $lockfile ] ||  break
         sleep  1
         /usr/bin/rsync  -aqu $local_dir $remote_dir
         >$logfile
done &