inotify实时无差异同步
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了inotify实时无差异同步相关的知识,希望对你有一定的参考价值。
Inotify简介Inotify是一种强大的、细粒度、异步的文件系统时间监测事件,linux内核从2.6.1
3起,加入了inotify支持,通过inotify可以监控文件系统中添加、删除,修改、移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools正是实施这样监控软件。Inotify实际是一种事件驱动机制,它为应用程序监控文件系统事件提供了实时响应事件的响应,也没有轮询造成的系统资源消耗,是非常自然的时间通知接口,也与自然世界的时间机制相符合。
Inotify实际是一种时间驱动机制,它为应用程序监控文件系统事件提供了实时响应事件的机制,而无须通过诸如cron等的伦旭机制来获取事件。Cron等机制不仅无法做到实时性,而且消耗大量系统资源,相比之下,inotify基于事件驱动,可以做到对应事件处理的实时响应,也没有轮询造成的系统资源消耗,是非常自然的事件通知接口,也与自然世界的事件机制相符合。
安装inotify
要监控nfsserver下的目录变化,所以inotify要安装在客户端
(1)、查看当前系统是否支持inotify
#uname -r
2.6.32-504.el6.x86_64
[[email protected] /]# ls -l /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Feb 3 17:12 max_queued_events
-rw-r--r-- 1 root root 0 Feb 3 17:12 max_user_instances
-rw-r--r-- 1 root root 0 Feb 3 17:12 max_user_watches
出现这三项表示支持
(2)、下载源码包
#mkdir -p /home/yankefei/tools
#cd /home/yankefei/tools/
# wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
源码安装第一步,解压
#tar zxf inotify-tools-3.14.tar.gz
切到目录,--prefix表示安装目录
[[email protected] ~]# cd /home/yankefei/tools/
[[email protected] tools]# ls
inotify-tools-3.14 inotify-tools-3.14.tar.gz
[[email protected] tools]# cd inotify-tools-3.14
[[email protected] inotify-tools-3.14]# ./configure --prefix /usr/local/inotify-tools-3.14
[[email protected] inotify-tools-3.14]# make && make install
创建软连接,访问更方便把版本号去掉
#ln –s /usr/local/inotify-tools-3.14/ /usr/local/inotify-tools
[[email protected] inotify-tools]# ls -l /usr/local/inotify-tools/
total 16
drwxr-xr-x 2 root root 4096 Feb 3 18:02 bin
drwxr-xr-x 3 root root 4096 Feb 3 18:02 include
drwxr-xr-x 2 root root 4096 Feb 3 18:02 lib
drwxr-xr-x 4rootr oot 4096 Feb 3 18:02share
Bin目录下两个工具:
一共安装了2个工具命令,即inotifywait和inotifywatch
Inotifywait:在被监控的文件或目录上等待特定文件系统事件(open、close、delete等发生)执行后处于阻塞状态,适合在shell脚本中使用。
Inotifywatch:收集被监视的文件系统使用度统计数据,指文件系统事件发生的次数统计。
Inotify命令常用参数详解
#./bin/inotifywait --help
参数:
-r|--recursive watch directories recursively 递归查询目录
-q|--quiet print less(only print events) 打印很少的信息,仅仅打印监控事件信息
-m|--monitor keep listening for events forever,without this option,inotifywait will exit after one event isreceived #始终保持事件监听状态
-excludei<pattern> like –exclude but case insensitive#排除文件或目录时,不区分大小写。
--timefmt<fmt>strftime-compatible-compatible format string for use with %T in –format string,指定时间输出的格式。
--format<fmt> print using a specified format string ;read the man page for more
…………..
监控/data 目录的创建,修改,删除
#/usr/local/inotify-tools/bin/inotifywait –mrq –timefmt ‘%d/%m%y %H:%M’ –format ‘%T %w%f’ –e create,close_write,delete /data
实现数据同步企业案列脚本,监控到目录的变化,然后同步
[[email protected] data]# mkdir -p /server/scripts
[[email protected] data]# cd /server/scripts
[[email protected] scripts]# vim inotify.sh
#!/bin/bash
inotify=/usr/local/inotify-tools/bin/inotifywait
$inotify -mrq --format '%w%f' -e create,close_write,delete /data \
|while read file
do
cd / &&
rsync -az ./data --delete [email protected]::backup/ \
--password-file=/etc/rsync.password
Done
网站这样的两个服务器最好实时同步的无差异同步但也非必须,脚本指出inotify命令的路径,然后inotify监控/data目录,然后通过管道把结果给后面的循环。把整个的data目录推送过去。在做无差异同步时必须注意,把服务端同步的目录里的其他内容删掉,这里是个危险,将被同步的目录和本本机器的任务目录分开。注释&&切换成功之后做推送命令
调试shell
#sh –x inotify.sh
[[email protected] scripts]# sh -x inotify.sh
+ inotify=/usr/local/inotify-tools/bin/inotifywait
+ read file
+ /usr/local/inotify-tools/bin/inotifywait -mrq --format %w%f -e create,close_write,delete /data
+ cd /
+ rsync -az ./data/ --delete [email protected]::backup --password-file=/etc/rsync.password
+ read file
+ cd /
+ rsync -az ./data/ --delete [email protected]::backup --password-file=/etc/rsync.password
+ read file
调试成功之后将它全路径放在后台,为了开机下次启动,将它放在rc.local里
[[email protected] scripts]# /bin/sh /server/scripts/inotify.sh &
[1] 5498
[[email protected] scripts]# vi rc.local
创建3000个文件
For n in `seq 3000`;do touch yan$n;done
#ls|wc -l
以上是关于inotify实时无差异同步的主要内容,如果未能解决你的问题,请参考以下文章