inotify事件监控工具

 inotify简介

· Inotify是一种强大的,细粒度的,异步的文件系统事件监控机制(软件),linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加,删除,修改,移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools正是实施这样监控的软件。还有国人周洋在金山公司开发的sersync。

· Inotify实际是一种事件驱动机制,它为应用程序监控文件系统事件提供了实时响应事件的机制,而无须通过诸如cron等的轮询机制来获取事件。cron等机制不仅无法做到实时性,而且消耗大量系统资源。相比之下,inotify基于事件驱动,可以做到对事件处理的实时响应,也没有轮询造成的系统资源消耗,是非常自然的事件通知接口,也与自然世界的事件机制相符合。

· inotify 的实现有几款软件
1)inotify-tools,
2)sersync(金山周洋)
3)lsyncd

特别说明:

下面的inotify配置是建立在rsync服务基础上的配置过程。

 inotify 实施准备

大前提rsync daemon 服务配置成功,可以再rsync客户端推送拉取数据,然后才能配置inotify服务。

开始安装

默认yum源:
base + extras + updates

扩展的yum源:
epel
1.网易163源
2。阿里云epel源

在安装inotify-tools前请先确认你的linux内核是否达到了2.6.13,并且在编译时开启CONFIG_INOTIFY选项,也可以通过以下命令检测。

查看当前系统是否支持inotify

1. [root@backup ~]# uname -r

2. 2.6.32-642.el6.x86_64

3. [root@backup ~]# ls -l /proc/sys/fs/inotify

4. 总用量 0

5. -rw-r--r-- 1 root root 0 3月  11 05:01 max_queued_events

6. -rw-r--r-- 1 root root 0 3月  11 05:01 max_user_instances

7. -rw-r--r-- 1 root root 0 3月  11 05:01 max_user_watches

8. 

9. #显示这三个文件证明支持

关键参数说明:

1. /proc/sys/fs/inotify目录下有三个文件,对inotify机制有一定的限制

2. max_user_watches:设置inotifywaitinotifywatch命令可以监视的文件数量(单进程)

3. max_user_instances:设置每个用户可以运行的inotifywaitinotifywatch命令的进程数。

4. max_queued_events:设置inotify实例事件(event)队列可容纳的事件数量。

 Yum安装inotify-tools:

1. #wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

2. yum -y install inotify-tools

3. rpm -qa inotify-tools

一共安装了2个工具,即inotifywait和inotifywatch
inotifywait:在被监控的文件或目录上等待特定文件系统事件(open,close,delete等)发生,执行后处于阻塞状态,适合shell脚本中使用。
inotifywatch:收集被监视的文件系统使用度统计数据,指文件系统事件发生的次数统计。

 inotifywait命令常用参数详解

下面用列表详细解释一下各个参数的含义

inotifywait参数

含义说明

-r --recursive

递归查询目录

-q --quiet

打印很少的信息,仅仅打印监控事件的信息

-m,--monitor

始终保持事件监听状态

--exclude

排除文件或目录时,不区分大小写。

--timefmt

指定时间输出的格式

--format

打印使用指定的输出类似格式字符串

-e,--event

通过此参数可以指定需要监控的事件,如下一个列表所示

-e :--event的各种事件含义

Events

含义

access

文件或目录被读取

modify

文件或目录内容被修改

attrib

文件或目录属性被改变

close

文件或目录封闭,无论读/写模式

open

文件或目录被打开

moved_to

文件或目录被移动至另外一个目录

move

文件或目录被移动到另一个目录或从另一个目录移动至当前目录

create

文件或目录被创建在当前目录

delete

文件或目录被删除

umount

文件系统被卸载

编写inotify实时监控脚本

1. #!/bin/bash

2. 

3. Path=/data

4. backup_Server=172.16.1.41

5. 

6. 

7. /usr/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete /data  | while read line  

8. do

9.     if [ -f $line ];then

10.  rsync -az $line --delete rsync_backup@$backup_Server::nfsbackup --password-file=/etc/rsync.password       

11.  else

12.  cd $Path &&\

13.         rsync -az ./ --delete rsync_backup@$backup_Server::nfsbackup --password-file=/etc/rsync.password

14.     fi

15. 

16. done

脚本可以加入开机启动: 
echo "/bin/sh /server/scripts/inotify.sh &" >> /etc/rc.local
提示:
一个& 代表从后台开始运行该条命令。

关键参数调整

/proc/sys/fs/inotify目录下有三个文件,对inotify机制有一定的限制
max_user_watches:设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)
max_user_instances:设置每个用户可以运行的inotifywait或inotifywatch命令的进程数
max_queued_events:设置inotify实例事件(event)队列可容纳的事件数量。

Inotify实时并发:

结论:经过测试,每秒200文件并发,数据同步几乎无延迟(小于1秒)

 inotify 优点:

1)监控文件系统事件变化,通过同步工具实现实时数据同步。

 inotify 缺点

1)并发如果大于200个文件(10-100k),同步就会有延迟
2)我们前面写的脚本,每次都是全部推送一次,但确实是增量的。也可以只同步变化的文件,不变化的不理。
3)监控到事件后,调用rsync同步是单进程的,而sersync为多进程同步。

 

posted @ 2018-11-09 14:06  aspen-  阅读(304)  评论(0)    收藏  举报