码迷,mamicode.com
首页 > 其他好文 > 详细

inotify实时无差异同步

时间:2018-02-03 22:01:17      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:阻塞   time   while   tool   this   简介   forever   share   vim   

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

[root@nfsserver /]# 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表示安装目录

[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


inotify实时无差异同步

标签:阻塞   time   while   tool   this   简介   forever   share   vim   

原文地址:http://blog.51cto.com/6931786/2068566

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!