rsync实时同步
rsync是不支持实时同步的,通常我们借助于inotify这个软件来实时监控文件变化,一旦inotify监控到文件变,则立即调用rsync进行同步。
1、安装inotify(装在客户端)
[root@web01 ~]# yum -y install inotify-tools
2、inotify参数介绍
-m 持续监控
-r 递归
-q 静默,仅打印时间信息
--timefmt 指定输出时间格式
--format 指定事件输出格式
%Xe 事件
%w 目录
%f 文件
-e 指定监控的事件
access 访问
modify 内容修改
attrib 属性修改
close_write 修改真实文件内容
open 打开
create 创建
delete 删除
umount 卸载
3、开始监控
[root@m01 ~]# /usr/bin/inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /root
4、实时监控并同步
[root@m01 ~]# /usr/bin/inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /var/www/html | while read line;do rsync -avzP --delete root@172.16.1.41/var/www/html
inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /var/www/html | while read line;do rsync -avrzP --delete /var/www/html/ root@9.57.18.22:/var/www/html;done
5、inotify常用参数
-m --始终保持监听状态,默认触发事件即退出
-r --递归查询目录
-q --打印出监控事件
-e --定义监控的事件,可用参数: access --访问文件 modify --修改文件 attrib --属性变更 open --打开文件 delete --删除文件 create --新建文件 move --文件移动
--fromfile --从文件读取需要监视的文件或者排除的文件,一个文件一行,排除的文件以@开头
--timefmt --时间格式
--format --输出格式
--exclude --正则匹配需要排除的文件,大小写敏感
--excludei --正则匹配需要排除的文件,忽略大小写
%y%m%d %H%M --年月日时钟 %T%w%f%e --时间路径文件名状态
检测源目录中是否有如下动作:modify,create,move,delete,attrib;一旦发生则发布至目标机器;方式为 ssh
src: 192.168.22.11(Rsync + Inotify-tools) dest: 192.168.22.12
两台机器需要做好 ssh 免密登录
# mdkir /data/test/dest/ --dest机器
# mdkir /data/test/src/ --src机器
# rsync -av --delete /data/test/src/ 192.168.22.12:/data/test/dest --测试下命令
# vim /data/test/test.sh
#!/bin/bash
/usr/bin/inotifywait -mrq -e modify,create,move,delete,attrib /data/test/src | while read events
do
rsync -a --delete /data/test/src/ 192.168.22.12:/data/test/dest
echo "`date +'%F %T'` 出现事件:$events" >> /tmp/rsync.log 2>&1
done
# chmod 755 /data/test/test.sh
# /data/test/test.sh &
# echo '/data/test/test.sh &' >> /etc/rc.local --设置开机自启,把/data/test/test.sh换成你的脚本路径
*******我们可以在目标机上也写一个这样的脚本: rsync -a --delete /data/test/dest/ 192.168.22.11:/data/test/src ;这样可以实现双向同步
发表评论