首页 > 代码库 > inotify + rsync 实时同步
inotify + rsync 实时同步
下载inotify
wget https://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
安装:
[root@zhu-centos6 ~]# tar -zxvf inotify-tools-3.14.tar.gz ##解压文件
[root@zhu-centos6 ~]# cd inotify-tools-3.14 ##进入inotify里面
[root@zhu-centos6 inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify-tools-3.14 #定义他的安装目录
------------------------
查看上一个命令是否执行成功,若执行成功,返回0,若执行出错则返回其他数字。
-----------------------
[root@zhu-centos6 inotify-tools-3.14]# make && make install ##开始执行 安装,若执行不出错,即表示安装完成。
inotifywait 单独分析
[root@Centos6-Vm-A-247 ~]#/usr/local/inotify-tools-3.14/bin/inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w%f‘ -e close_write,delete,create,attrib /data1
#执行上面命令,是让inotifywait监听/data1/目录,当监听到有发生close_write,delete,create,attrib等事件发生时,按%d/%m/%y %H:%M %w%f的格式输出。
inotifywait 参数说明
参数名称 | 参数说明 |
-m,–monitor | 始终保持事件监听状态 |
-r,–recursive | 递归查询目录 |
-q,–quiet | 只打印监控事件的信息 |
–excludei | 排除文件或目录时,不区分大小写 |
-t,–timeout | 超时时间 |
–timefmt | 指定时间输出格式 |
–format | 指定时间输出格式 |
-e,–event | 后面指定删、增、改等事件 |
inotifywait events事件说明
事件名称 | 事件说明 |
access | 读取文件或目录内容 |
modify | 修改文件或目录内容 |
attrib | 文件或目录的属性改变 |
close_write | 修改真实文件内容 |
close_nowrite | |
close | |
open | 文件或目录被打开 |
moved_to | 文件或目录移动到 |
moved_from | 文件或目录从移动 |
move | 移动文件或目录移动到监视目录 |
create | 在监视目录下创建文件或目录 |
delete | 删除监视目录下的文件或目录 |
delete_self | |
unmount | 卸载文件系统 |
-----------------实现实时同步的脚本------------------------------------
#!/bin/bash
#para
##目标主机的IP
hostip=192.168.2.185
##需要监控同步的目录
src=http://www.mamicode.com/data1
##目标主机的模块(/etc/rsyncd.conf里面的模块)
dst=zhuzhiwei
##rsync的别名用户
user=zzw
##rsync的密码文件存放位置
rsync_passfile=/etc/rsync.password
##inotify工具的位置
inotify_home=/usr/local/inotify-tools-3.14/
######judge(以下内容是检查上面的命令是否正确,可以不写)
if [ ! -e "$src" ] \
|| [ ! -e "${rsync_passfile}" ] \
|| [ ! -e "${inotify_home}/bin/inotifywait" ] \
|| [ ! -e "/usr/bin/rsync" ];
then
echo "Check File and Folder"
exit 9
fi
#############################
${inotify_home}/bin/inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w%f‘ -e close_write,delete,create,attrib $src \
| while read file
do
#rsync -avzP --delete --timeout=100 --password-file=${rsync_passfile} $src $user@hostip::$dst >/dev/null 2>&1
cd $src && rsync -aruz -R --delete ./ --timeout=100 $user@$hostip::$dst --password-file=${rsync_passfile} >/dev/null 2>&1
done
exit 0
####相关脚本可参考:http://www.cnblogs.com/jackyyou/p/5681126.html
---------------------------------------------------------------------------------
优化 Inotify
# 在/proc/sys/fs/inotify目录下有三个文件,对inotify机制有一定的限制
1 2 3 4 5 | [root@web ~]# ll /proc/sys/fs/inotify/ 总用量0 -rw-r--r--1 root root 09月923:36 max_queued_events -rw-r--r--1 root root 09月923:36 max_user_instances -rw-r--r--1 root root 09月923:36 max_user_watches |
-----------------------------
max_user_watches #设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)
max_user_instances #设置每个用户可以运行的inotifywait或inotifywatch命令的进程数
max_queued_events #设置inotify实例事件(event)队列可容纳的事件数量
----------------------------
[root@web ~]# echo 50000000>/proc/sys/fs/inotify/max_user_watches -- 把他加入/etc/rc.local就可以实现每次重启都生效
[root@web ~]# echo 50000000>/proc/sys/fs/inotify/max_queued_events
更多实时同步工具:http://oldboy.blog.51cto.com/2561410/1216457
inotify+rsync实时数据同步实战操作讲解:
http://oldboy.blog.51cto.com/2561410/1111439
本文出自 “Zack” 博客,请务必保留此出处http://zhuzhiwei.blog.51cto.com/8446194/1947821
inotify + rsync 实时同步