• 每天进步一点点!

文章分类

推荐网站

常用手册

通过rsync+inotify-tools+ssh实现触发式远程实时同步【原创】

<<返回

2016-06-03 15:07:23

在Linux平台下我们可以利用2.6内核的inotify监控文件系统机制,通过rsync+inotify-tools+ssh实现触发式远程实时同步,即,当源目录下的文件或目录有变化时,会立即同步到目标目录。

  1. 安装inotify-tools和rsync,目前各大Linux发行版本都已经具有了rsync与inotify-tools的软件包,推荐通过RPM,yum,apt-get等方式进行安装。
yum install rsync inotify-tools
  1. 配置ssh key信任,实现无需输入密码同步,参见 http://www.05do.com/blog/content/73
  2. 创建inotify_rsync.sh脚本,如下:
SRC=/data/webroot/admin.zhugexuetang/
DST=root@10.19.196.161:/data/webroot/admin.zhugexuetang/

inotifywait -mrq -e modify,delete,create,attrib ${SRC} | while read D E F
	do
		#rsync -az --delete --exclude='runtime'  --exclude='.git' $SRC $DST
		rsync -az --exclude='runtime'  --exclude='.git' $SRC $DST
	done

 

相关注解如下:

inotifywait -mrq -e modify,delete,create,attrib ${SRC} | while read D E F
-m 是保持一直监听
-r 是递归查看目录
-q 是打印出事件
-e create,move,delete,modify,attrib 是指 “监听 创建 移动 删除 写入 权限” 事件
rsync -azt --delete --exclude='runtime'  --exclude='.git' $SRC $DST
-a 存档模式
-z 压缩文件数据在传输
-t 维护修改时间
-delete 删除于多余文件 
要排除同步某个目录时,为rsync添加--exculde=PATTERN参数,注意,路径是相对路径,具体查看man rsync。
要排除某个目录的事件监听的处理时,为inotifywait添加--exclude参数,具体查看man inotifywait。
inotifywait 命令产生三个返回值,分别是“日期,时间,文件” 这3个返回值会做为参数传给read,因此脚本中的“while read D E F” 写法细化了返回值。

 

  1. 赋予脚本可执行权限
chmod +x inotify_rsync.sh
  1. 执行脚本
 nohup ./inotify_/root/rsync.sh >/dev/null 2>&1 &
  1. 设置脚本开机自启动
cat "nohup ./inotify_/root/rsync.sh >/dev/null 2>&1 &" >> /etc/rc.local
  1. 测试

在/data/webroot/admin.zhugexuetang/目录下增加一个1.txt,然后查看10.19.196.161:/data/webroot/admin.zhugexuetang/目录下是否已经存在了1.txt文件,如果已经存在了,说明同步成功了。

 

文章评论

  • 暂无评论

发表评论

昵称:

内容:

发表评论