inotify+rsync 实时同步目录文件

由于inotify特性需要Linux内核的支持,在安装inotify-tools前要先确认Linux系统内核是否达到了2.6.13以上,如果Linux内核低于2.6.13版本,就需要重新编译内核加入inotify的支持,也可以用如下方法判断,内核是否支持inotify:
   # uname -r
   2.6.32-431.el6.x86_64
   查看内核是否支持inotify API,如果有以下三项,表示系统已经默认支持inotify,接着就可以开始安装inotify-tools了,我这里使用的是inotify-tools-3.14.tar.gz。
   # ll /proc/sys/fs/inotify
   -rw-r--r-- 1 root root 0 04-13 19:56 max_queued_events
   -rw-r--r-- 1 root root 0 04-13 19:56 max_user_instances
   -rw-r--r-- 1 root root 0 04-13 19:56 max_user_watches

简单介绍一下这三个文件是做什么用的:
   max_queued_evnets:表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。
   max_user_instances:表示每一个real user ID可创建的inotify instatnces的数量上限。
   max_user_watches:表示每个inotify instatnces可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况,适当增加此值的大小,例如:echo "9000000" > /proc/sys/fs/inotify/max_user_watches

 

查看完相关的安装环境后那接下来我们就可以安装inotify-tools这个程序包了,安装步骤很简单,程序包获取方法这里不再提供:

# tar xf inotify-tools-3.14.tar.gz
# cd inotify-tools-3.14
# ./configure
# make && make install
安装好之后可以查看/usr/local/bin下生成两个二进制文件:
# ll /usr/local/bin
创建一个目录存放要同步的数据:
# mkdir /myrsync_data/mydata
# cd /myrsync_data/mydata
# vim inotifyrsync.sh
#!/bin/bash
host=172.16.27.1 #从服务器的主机地址
data_dir=/myrsync_data/data #内容发布服务器上创建的同步数的路径
dst=my_data_rsync #从服务器上导出的共享目录
username=myuser #从服务器上/etc/rsyncd.passwd这个文件中定义的用户名
#决对路径执行inotifywait这个程序,
#-m, 即--monitor,表示始终保持事件监听状态。
#-r, 即--recursive,表示递归查询目录。
#-q, 即--quiet,表示打印出监控事件。
#-e, 即--event,通过此参数可以指定要监控的事件,常见的事件有modify、delete、create、attrib等。
#--timefmt:指定时间的输出格式。
#--format:指定变化文件的详细信息。
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $data_dir | while read files
        do
                /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/rsyncd.passwd $data_dir $username@$host::$dst
                echo "${files} was rsynced" >> /tmp/rsync.log 2>&1 #写入日志
        done
#保存退出
# chmod 755 /web/wwwroot/inotifyrsync.sh
# bash /myrsync_data/mydata/inotifyrsync.sh &

 


posted @ 2015-08-18 14:27  itank  阅读(543)  评论(0编辑  收藏  举报