inotify实时无差别同步

Inotify简介linux

     Inotify是一种强大的、细粒度、异步的文件系统时间监测事件,linux内核从2.6.1git

3起,加入了inotify支持,经过inotify能够监控文件系统中添加、删除,修改、移动等各类事件,利用这个内核接口,第三方软件就能够监控文件系统下文件的各类变化状况,而inotify-tools正是实施这样监控软件。Inotify实际是一种事件驱动机制,它为应用程序监控文件系统事件提供了实时响应事件的响应,也没有轮询形成的系统资源消耗,是很是天然的时间通知接口,也与天然世界的时间机制相符合。github

  Inotify实际是一种时间驱动机制,它为应用程序监控文件系统事件提供了实时响应事件的机制,而无须经过诸如cron等的伦旭机制来获取事件。Cron等机制不只没法作到实时性,并且消耗大量系统资源,相比之下,inotify基于事件驱动,能够作到对应事件处理的实时响应,也没有轮询形成的系统资源消耗,是很是天然的事件通知接口,也与天然世界的事件机制相符合。shell

安装inotifyvim

要监控nfsserver下的目录变化,因此inotify要安装在客户端bash

1)、查看当前系统是否支持inotify服务器

#uname -rless

2.6.32-504.el6.x86_64异步

[root@nfsserver /]# ls -l /proc/sys/fs/inotify/ide

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表示安装目录

[root@nfsserver ~]# cd /home/yankefei/tools/

[root@nfsserver tools]# ls

inotify-tools-3.14  inotify-tools-3.14.tar.gz

[root@nfsserver tools]# cd inotify-tools-3.14

[root@nfsserver inotify-tools-3.14]# ./configure --prefix /usr/local/inotify-tools-3.14

 

[root@nfsserver inotify-tools-3.14]# make && make install

建立软链接,访问更方便把版本号去掉

#ln s /usr/local/inotify-tools-3.14/ /usr/local/inotify-tools

[root@nfsserver 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

实现数据同步企业案列脚本,监控到目录的变化,而后同步

[root@nfsserver data]# mkdir -p /server/scripts

[root@nfsserver data]# cd /server/scripts

[root@nfsserver 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 rsync_backup@192.168.154.145::backup/ \

   --password-file=/etc/rsync.password

Done

网站这样的两个服务器最好实时同步的无差别同步但也非必须,脚本指出inotify命令的路径,而后inotify监控/data目录,而后经过管道把结果给后面的循环。把整个的data目录推送过去。在作无差别同步时必须注意,把服务端同步的目录里的其余内容删掉,这里是个危险,将被同步的目录和本本机器的任务目录分开。注释&&切换成功以后作推送命令

调试shell

#sh x inotify.sh

[root@nfsserver 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 rsync_backup@192.168.154.145::backup --password-file=/etc/rsync.password

+ read file

+ cd /

+ rsync -az ./data/ --delete rsync_backup@192.168.154.145::backup --password-file=/etc/rsync.password

+ read file

调试成功以后将它全路径放在后台,为了开机下次启动,将它放在rc.local

[root@nfsserver scripts]# /bin/sh /server/scripts/inotify.sh  &

[1] 5498

[root@nfsserver scripts]# vi rc.local

建立3000个文件

  For n in `seq 3000`;do touch yan$n;done

#ls|wc -l

相关文章
相关标签/搜索