将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
&
|
本文转自 紫色葡萄 51CTO博客,原文链接:http://blog.51cto.com/purplegrape/1399410,如需转载请自行联系原作者