`
LIMIMGJIE
  • 浏览: 173716 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

inotify监控linux系统下的目录变化

阅读更多
最近,有个项目需要及时删除Nginx服务生成的缓存文件,由于不是很了解Nginx缓存生成的策略,在网上也没有仔细找,经过大家讨论,最终希望引入liunx的inotify功能,监控某个liunx目录下的各种事件(create,delete,access等等).
想了解inotify的朋友,请参考以下两篇博文:
1.http://www.ibm.com/developerworks/cn/linux/l-inotify.html使用 inotify 监控 Linux 文件系统事件
2.http://www.ibm.com/developerworks/cn/linux/l-inotifynew/index.htmlinotify -- Linux 2.6 内核中的文件系统变化通知机制

如果看完两篇博文,你的想法是用C语言马上写一个监控文件的程序(我当初也这么想的),先别忙,看看下面的文章,马上向您介绍一下inotify-tools这个工具包,目前最新版是3.3版本,这个工具包几乎包含了目录和文件的监控点,也就是说,不用动手写C代码,已经有前人帮我写好了,我们可以直接通过bash脚本的调用完成这个功能.

1、先查看linux的内核是否支持inotify,支持inotify的内核最小为2.6.13,输入命令:uname –a。如下图所示,内核为2.6.27,应该支持inotify.如果不支持,我建议你选择一个高级别的linux内核.否则应该会有很多麻烦.

2、还可以通过如下命令查看系统是否支持inotify:ll /proc/sys/fs/inotify
如果有如下输出,表示系统内核已经支持inotify:
total 0
-rw-r--r-- 1 root root 0 Feb 21 01:15 max_queued_events
-rw-r--r-- 1 root root 0 Feb 21 01:15 max_user_instances
-rw-r--r-- 1 root root 0 Feb 21 01:15 max_user_watches

3.inotify-tools的下载和安装
下载地址:[url]http://downloads.sourceforge.net/inotify-tools/inotify-tools-3.13.tar.gz?modtime=1199213676&big_mirror=0
[/url]
安装过程:略.

4.内部命令介绍
系统下执行命令:man inotify、 man inotifywait、 man inotifywatch即可得到相应的帮助信息,表示inotify安装成功。

man inotify:
  捕获文件系统的各种状态事件
 
  inotify events

   Bit                Description
 IN_ACCESS          File was accessed (read) (*)
 IN_ATTRIB          Metadata changed (permissions, timestamps,
                    extended attributes, etc.) (*)
 IN_CLOSE_WRITE     File opened for writing was closed (*)
 IN_CLOSE_NOWRITE   File not opened for writing was closed (*)
 IN_CREATE          File/directory created in watched directory (*)
 IN_DELETE          File/directory deleted from watched directory (*)
 IN_DELETE_SELF     Watched file/directory was itself deleted
 IN_MODIFY          File was modified (*)
 IN_MOVE_SELF       Watched file/directory was itself moved
 IN_MOVED_FROM      File moved out of watched directory (*)
 IN_MOVED_TO        File moved into watched directory (*)
 IN_OPEN            File was opened (*)
  


man inotifywait:
  等待并监控某个目录或文件的状态改变,能够适时的通过liunx脚本等待并监控文件改变的事件,可以在事件发生时退出脚本,也可以在事件发生时输出一些信息.

参数说明:

--fromfile <file>  只监控目录下文件状态的变化
-m, --monitor      当事件发生后直接执行退出,-m 参数将不退出当前的shell脚本.
-r, --recursive    递归监控当前目录下的所有文件和目录.(默认的文件和目录数最大是 8192个;如果不满足可以修改/proc/sys/fs/inotify/max_user_watches
--exclude <pattern>  通过正则匹配文件名,大小写敏感.
--excludei <pattern>  通过正则匹配文件名,大小写不敏感.
-t <seconds>       事件发生时的秒数.
  -e <event>        监听那些事件的发生
--timefmt option   指定输出的时间格式
--format <fmt>     输出指定时间格式.
     %w 监控事件发生时的文件名或文件路径
     %f 监控目录内部事件发生时文件名称
     %e 监控指定的事件发生
     %T 输出事件发生时的时间,--timefmt option指定格式

inotifywatch:
  使用linux的inotify特性监控某段时间内的文件状态,并输出摘要报表.
样例:输出beagle目录下60秒内的访问和修改事件触发报表
% inotifywatch -v -e access -e modify -t 60 -r ~/.beagle
       Establishing watches...
       Setting up watch(es) on /home/rohan/.beagle
       OK, /home/rohan/.beagle is now being watched.
       Total of 302 watches.
       Finished establishing watches, now collecting statistics.
       Will listen for events for 60 seconds.
       total  access  modify  filename
       1436   1074    362     /home/rohan/.beagle/Indexes/FileSystemIndex/PrimaryIndex/
       1323   1053    270     /home/rohan/.beagle/Indexes/FileSystemIndex/SecondaryIndex/
       303    116     187     /home/rohan/.beagle/Indexes/KMailIndex/PrimaryIndex/
       261    74      187     /home/rohan/.beagle/TextCache/
       206    0       206     /home/rohan/.beagle/Log/
       42     0       42      /home/rohan/.beagle/Indexes/FileSystemIndex/Locks/
       18     6       12      /home/rohan/.beagle/Indexes/FileSystemIndex/
       12     0       12      /home/rohan/.beagle/Indexes/KMailIndex/Locks/
       3      0       3       /home/rohan/.beagle/TextCache/54/
       3      0       3       /home/rohan/.beagle/TextCache/bc/
       3      0       3       /home/rohan/.beagle/TextCache/20/
       3      0       3       /home/rohan/.beagle/TextCache/62/
       2      2       0       /home/rohan/.beagle/Indexes/KMailIndex/SecondaryIndex/


编写自己的监控脚本:
需求:由于使用Nginx的反向代理,生成本地缓存的策略,所以需要监控某个目录的新增或删除的变化,并将变化的文件名称输出到一个LOG中,带后续文件有修改时,可以通过该log定位文件地址,并删除该文件,及时向前端反映文件变更后的变化.
脚本; inodify_cache_list.sh
#!/bin/sh  
# A slightly complex but actually useful example  
logfile="/opt/data/cache_list.txt"
temp_logfile="/opt/data/cache_tempfile.txt" 

/usr/local/bin/inotifywait -mrq  --format '%w%f' -e moved_to /opt/data/proxy_cache_dir/| while read  file; 
do  
        echo "/usr/bin/printf \"delete "`grep -a 'KEY:' ${file}| sed -e s/KEY://g;`"\\r\\n\" | nc 127.0.0.1 11211,rm -f "${file} |tee -a $logfile | tee -a $temp_logfile 
done 

分享到:
评论

相关推荐

    Linux inotify

    Linux inotify 是一种文件系统变化通知机制,允许文件或者文件夹的增删等事件即刻反映在用户空间。inotify 机制是 Linux 内核中的一种机制,用于通知用户空间程序文件系统的变化。 一、inotify 的主要功能: ...

    用inotify监视文件目录变化

    inotify是一种Linux 内核提供的文件系统事件通知机制,可以监视文件目录的变化,实时地通知应用程序文件系统中的变化。下面是使用inotify监视文件目录变化的知识点: 1. 什么是inotify? inotify是Linux 内核提供...

    linux下监控文件夹内变化

    总的来说,这个项目为你提供了一个实际应用Inotify机制的示例,通过学习和实践,不仅可以深入理解Inotify的工作原理,还能掌握在Linux环境下使用C语言编程监控文件系统变化的技能。记得参考提供的文档和说明,以便更...

    inotify linux 的文件夹监视

    这是监视文件夹变化的程序,指定监视的文件夹类型

    基于inotify的Linux文件实时监控程序,同时调用河马扫描来检测文件.zip

    在Linux系统中,inotify是内核提供的一种文件系统事件监控机制,允许应用程序监控文件系统中的各种变化,如创建、删除、修改等。基于inotify,开发者可以编写出实时监控文件或目录变化的程序,从而实现高效的数据...

    使用Inotify 监控目录与文件的方法详解

    Inotify 是 Linux 内核提供的一种文件系统事件监控机制,它允许程序监控文件或目录的改变,例如创建、删除、修改、移动等。通过使用 Inotify,开发者可以编写出能够实时响应文件系统变动的程序,这在日志监控、同步...

    用inotify+rsrnc实现linux文件及目录的监控和同步

    在Linux系统中,实时监控文件或目录的变化是一项重要的任务,特别是在开发、运维或者自动化场景下。`inotify`是Linux内核提供的一种高效的通知机制,它允许应用程序监听文件系统的事件,如创建、删除、修改等。结合`...

    linux下文件及目录的监控程序

    "Linux下文件及目录的监控程序"就是这样一个工具,它能实时监控指定的文件和目录,并在发生变化时记录这些变动。下面将详细介绍这个程序及其相关知识点。 首先,这个程序的实现主要依赖于Linux内核提供的`inotify`...

    Linux unison+inotify 文件实时双向同步

    在文件同步场景中,inotify可以用来实时监控文件或目录的变化,并触发同步动作。 3. **unison+inotify结合**:将unison与inotify结合,可以在文件发生变化时立即触发unison的同步操作,实现文件的实时双向同步。...

    inotify-tools-3.14.tar.gz+linux文件同步软件(含安装方法和同步脚本)

    2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools正是实施这样监控的软件。...

    FTP客户端,通过inotify机制,可实现对特定目录下的文件生成情况进行监控,当有文件生成后自动上传到FTP服务器

    inotify是Linux内核提供的一种文件系统事件监控工具,它可以监听文件系统的变化,如文件创建、删除、修改等。在我们的FTP客户端中,我们可以使用inotify来监控指定目录: 1. **初始化inotify**:调用inotify_init...

    实时监控文件系统:Linux系统监控技术详解

    在Linux系统中,文件系统的监控是一项重要的系统管理任务。它可以帮助系统管理员及时发现文件系统中的变化,如文件的创建、删除、修改等,从而进行相应的处理,如备份、审计或安全检查。本文将详细介绍Linux系统中...

    CentOS下用rsync+inotify实现实时同步

    然后,我们需要编写同步脚本,使用inotify监控文件系统中的变化,然后触发rsync同步命令。 7. rsync+inotify的优点 使用rsync+inotify实现实时同步可以实现文件之间的实时同步备份,具有高效、可靠、安全等特点。...

    iNotify c语言 demo

    iNotify是Linux内核提供的一种高效的通知机制,用于监视文件系统中的变化,如文件或目录的创建、修改、删除和移动等。这个机制是通过inotify接口实现的,允许应用程序实时跟踪这些变化,而无需持续轮询文件系统,极...

    inotify-tools-3.14.tar.gz

    Inotify是Linux内核提供的一种文件系统事件监控机制,它允许应用程序监控文件系统的变化,如创建、删除、修改等操作。而`inotify-tools`则是一组用于与Inotify接口交互的用户空间工具,能够帮助我们更方便地利用...

    inotify用法详解

    在Linux环境下,inotify提供了一种高效且灵活的方式来监控文件系统的变化,如文件或目录的创建、删除、修改等事件。这一机制对于自动化脚本编写、日志监控以及文件同步等场景尤为重要。下面将深入解析inotify的核心...

Global site tag (gtag.js) - Google Analytics