近期,有个项目须要及时删除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: 
  捕获文件系统的各种状态事件

  1. inotify events
  2. Bit                Description
  3. IN_ACCESS          File was accessed (read) (*)
  4. IN_ATTRIB          Metadata changed (permissions, timestamps,
  5. extended attributes, etc.) (*)
  6. IN_CLOSE_WRITE     File opened for writing was closed (*)
  7. IN_CLOSE_NOWRITE   File not opened for writing was closed (*)
  8. IN_CREATE          File/directory created in watched directory (*)
  9. IN_DELETE          File/directory deleted from watched directory (*)
  10. IN_DELETE_SELF     Watched file/directory was itself deleted
  11. IN_MODIFY          File was modified (*)
  12. IN_MOVE_SELF       Watched file/directory was itself moved
  13. IN_MOVED_FROM      File moved out of watched directory (*)
  14. IN_MOVED_TO        File moved into watched directory (*)
  15. 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秒内的訪问和改动事件触发报表

  1. % inotifywatch -v -e access -e modify -t 60 -r ~/.beagle
  2. Establishing watches...
  3. Setting up watch(es) on /home/rohan/.beagle
  4. OK, /home/rohan/.beagle is now being watched.
  5. Total of 302 watches.
  6. Finished establishing watches, now collecting statistics.
  7. Will listen for events for 60 seconds.
  8. total  access  modify  filename
  9. 1436   1074    362     /home/rohan/.beagle/Indexes/FileSystemIndex/PrimaryIndex/
  10. 1323   1053    270     /home/rohan/.beagle/Indexes/FileSystemIndex/SecondaryIndex/
  11. 303    116     187     /home/rohan/.beagle/Indexes/KMailIndex/PrimaryIndex/
  12. 261    74      187     /home/rohan/.beagle/TextCache/
  13. 206    0       206     /home/rohan/.beagle/Log/
  14. 42     0       42      /home/rohan/.beagle/Indexes/FileSystemIndex/Locks/
  15. 18     6       12      /home/rohan/.beagle/Indexes/FileSystemIndex/
  16. 12     0       12      /home/rohan/.beagle/Indexes/KMailIndex/Locks/
  17. 3      0       3       /home/rohan/.beagle/TextCache/54/
  18. 3      0       3       /home/rohan/.beagle/TextCache/bc/
  19. 3      0       3       /home/rohan/.beagle/TextCache/20/
  20. 3      0       3       /home/rohan/.beagle/TextCache/62/
  21. 2      2       0       /home/rohan/.beagle/Indexes/KMailIndex/SecondaryIndex/

编写自己的监控脚本: 
需求:因为使用Nginx的反向代理,生成本地缓存的策略,所以须要监控某个文件夹的新增或删除的变化,并将变化的文件名称称输出到一个LOG中,带后续文件有改动时,能够通过该log定位文件地址,并删除该文件,及时向前端反映文件变更后的变化. 
脚本; inodify_cache_list.sh

    1. #!/bin/sh
    2. # A slightly complex but actually useful example
    3. logfile="/opt/data/cache_list.txt"
    4. temp_logfile="/opt/data/cache_tempfile.txt"
    5. /usr/local/bin/inotifywait -mrq  --format '%w%f' -e moved_to /opt/data/proxy_cache_dir/| while read  file;
    6. do
    7. 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
    8. done

使用inotify实现linux系统下的目录变化监控的更多相关文章

  1. Linux系统下/tmp目录文件重启后自动删除,不重启自动删除10天前的/TMP的文件(转)

    /tmp目录文件重启后自动删除现在知道有ubuntu和solaris系统source:http://blog.chinaunix.net/uid-26212859-id-3567875.html经常会 ...

  2. Linux系统下查看目录大小

    转载:http://blog.csdn.net/iamlaosong/article/details/7085178 我们有个系统每天要下载数据,为了检查下载数据是否正常,需要查看下载数据目录大小,因 ...

  3. Linux系统下进入目录文件需要什么权限?

    在Linux下进入目录需要什么权限? 1--让我们先来了解一下Linux下一个文件有哪些权限?(在linux下一切皆文件) 一个文件可以具有的权限有:可读.可写.可执行权限 r 可读权限---read ...

  4. linux系统下Nagios+rrdtool+Pnp4nagios监控环境的搭建

    环境中的软件版本>>>>>>>>>>>>>>>>>>nagios版本:3.5.1rrdtoo ...

  5. Linux系统下统计目录及其子目录文件个数

    (1)查看某目录下文件的个数: ls -l |grep "^-"|wc -l 或 find ./company -type f | wc -l (2)查看某目录下文件的个数,包括子 ...

  6. Linux系统下Apache2.4.17的安装过程

    Linux系统下安装Apache Server2.4.17.还是先声明一下,Linux命令我不进行讲解,因为我不是讲Linux命令的.有需要注意的地方,我会上图,没什么值得的注意的地方,我就不上图了. ...

  7. linux系统下修改文件夹目录权限

    linux系统下修改文件夹目录权限 文件夹权限问题 Linux.Fedora.Ubuntu修改文件.文件夹权限的方法差不多.很多人开始接触Linux时都很头痛Linux的文件权限问题.这里告诉大家如何 ...

  8. linux系统下nginx安装目录和nginx.conf配置文件目录

    linux系统下nginx安装目录和nginx.conf配置文件目录 1.查看nginx安装目录 输入命令 # ps  -ef | grep nginx 返回结果包含安装目录 root      26 ...

  9. linux系统下的权限知识梳理

    下面对linux系统下的有关权限操作命令进行了梳理总结,并配合简单实例进行说明.linux中除了常见的读(r).写(w).执行(x)权限以外,还有其他的一些特殊或隐藏权限,熟练掌握这些权限知识的使用, ...

随机推荐

  1. vue slot slot-scope

    https://segmentfault.com/a/1190000012996217 插槽,也就是slot,是组件的一块HTML模板,这块模板显示不显示.以及怎样显示由父组件来决定. 实际上,一个s ...

  2. 如何创建JAR文件?如何运行.jar形式的Java程序?

    一.如何创建JAR文件? .jar是用来压缩档案或者解压档案的文件格式,其特点是具有无损压缩的功能.想知道如何创建这种程序?请访问 http://www.cnblogs.com/yjmyzz/p/ex ...

  3. VBA小功能集合-判断列内是否有重复值

    1.判断列内是否有重复值: Dim arrT As Range Dim rng As Range Set arrT = Range("A:A")'判读A列单元格 For Each ...

  4. IIS管理器如何添加网站

    IIS服务器一些步骤 安装好iis后 右击网站按钮点击添加网站 网站名称填写无所谓,物理路径(注意是大路径,一个项目所有的文件在那个文件夹下), Ip地址自己定义最好是hosts文件已经绑定了域名的, ...

  5. DirectorySearcher LDAP

    1.从LDAP服务器上面获取用户名 sAMAccountName是个人的CN结点中的一个属性,例如个人的CN的sAMAccountName的值为:Amy.我命名它为shortname,即短名 publ ...

  6. ListView异步加载图片

    ListView异步加载图片是非常实用的方法,凡是是要通过网络获取图片资源一般使用这种方法比较好,用户体验好,下面就说实现方法,先贴上主方法的代码: package cn.wangmeng.test; ...

  7. linux 内存分析

    http://blog.yufeng.info/archives/2456  这篇文章不错 值得看 http://www.361way.com/memory-analysis/5018.html

  8. 解决长时间计划任务rsync同步进程数过多

      用rsync同步远程服务器,由于设置的的同步间隔较短(5分钟),这样一旦网速问题导致5分钟内同步不完.就会倒是同步紊乱,导致系统中很多rsync进程(# ps -aux | grep rsync) ...

  9. source sh运行脚本的差别

    主要有两种方式运行shell脚本 1)source test.bsh 2)sh test.bsh 1)souce运行脚本文件会在父程序中运行.各项动作都会在原本的bash内生效.运行过程不另开进程.脚 ...

  10. UVALive - 4255 - Guess (拓扑排序)

    Guess 题目传送:Guess 白书例题 注意拓扑排序时,,入度同一时候为0的前缀和须要赋值为同一个数(这个数能够随机取.由于前缀和是累加的,每个a的数值都仅仅和前缀和之差有关).,由于此时能够看成 ...