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 &