美文网首页
inotifywait文件监控

inotifywait文件监控

作者: 滚石_c2a6 | 来源:发表于2018-08-02 20:35 被阅读690次

    inotifywait 异步文件系统监控机制

    Inotify 一种强大的、细粒度的、异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性、读写属性、权限属性、删除创建、移动等操作,也就是可以监控文件发生的一切变化。
    inotify-tools 是一个C库和一组命令行的工作提供Linux下inotify的简单接口。inotify-tools安装后会得到inotifywait和inotifywatch这两条命令:

    inotifywait命令 可以用来收集有关文件访问信息,Linux发行版一般没有包括这个命令,需要安装inotify-tools,这个命令还需要将inotify支持编译入Linux内核,好在大多数Linux发行版都在内核中启用了inotify。
    inotifywatch命令 用于收集关于被监视的文件系统的统计数据,包括每个 inotify 事件发生多少次。

    开始之前需要检测系统内核是否支持inotify:

    使用uname -r命令检查Linux内核,如果低于2.6.13,就需要重新编译内核加入inotify的支持。

    使用ll /proc/sys/fs/inotify命令,是否有以下三条信息输出,如果没有表示不支持。

    ll /proc/sys/fs/inotify

    total 0
    -rw-r--r-- 1 root root 0 Jan 4 15:41 max_queued_events
    -rw-r--r-- 1 root root 0 Jan 4 15:41 max_user_instances
    -rw-r--r-- 1 root root 0 Jan 4 15:41 max_user_watches

    inotifywait使用

    语法:inotifywait [-hcmrq] [-e ] [-t ] [–format ] [–timefmt ] [ … ]
    -m:一直监控指定的目录,接收到一个事情而不退出,无限期地执行。默认的行为是接收到一个事情后立即退出。
    @:排除不需要监视的文件,可以是相对路径,也可以是绝对路径。
    -o, –outfile :输出事情到一个文件而不是标准输出。
    -s, –syslog:输出错误信息到系统日志
    -d, –daemon:跟–monitor一样,除了是在后台运行,需要指定–outfile把事情输出到一个文件。也意味着使用了–syslog。
    –exclude :正则匹配需要排除的文件,大小写敏感。
    –excludei :正则匹配需要排除的文件,忽略大小写。
    -t , –timeout :设置超时时间,如果为0,则无限期地执行下去。
    -r:递归监控所监控目录的子目录。
    -q:指定一次,不会输出详细信息,指定二次,除了致命错误,不会输出任何信息。
    –timefmt:指定时间格式。
    –format:
    %w 表示发生事件的目录
    %f 表示发生事件的文件
    %e 表示发生的事件
    %Xe 事件以“X”分隔
    %T 使用由–timefmt定义的时间格式
    -e:指定监控事件项

    举个例子:
    /usr/bin/inotifywait -m -o log.txt --timefmt '%d/%m/%y/%H:%M' --format '%T %w %f' -e modify,delete,create,attrib var


    image.png

    todo:有个问题,如果只是监控一个文件,监控一个目录就没有问题
    /usr/bin/inotifywait -m -o log.txt --timefmt '%d/%m/%y/%H:%M' --format '%T %w %f' -e modify,delete,create,attrib test.txt
    log日志只会在第一次时显示,后面test.txt变化都不会记录在日志上

    守护进程模式如果只监控一个文件也启动不了,查看进程并没有启动
    /usr/bin/inotifywait -d -o log.txt --timefmt '%d/%m/%y/%H:%M' --format '%T %w %f' -e modify,delete,create,attrib t.txt

    /usr/bin/inotifywait -d -o log.txt --timefmt '%d/%m/%y/%H:%M' --format '%T %w %f' -e modify var/test.txt
    在守护进程模式下,-o参数和被监控的目录必须为绝对路径,否则日志不会输出

    /usr/bin/inotifywait -drq -o /root/sentry/sentry.log --timefmt '%d/%m/%y/%H:%M' --format '%T %w %f %e' -e modify,delete,create,attrib --excludei "(swp|swx)" /root/sentry/var

    完整的例子:

    !/bin/bash

    inotifywait -drq -o /tmp/inotifywait.log --timefmt '%d/%m/%y/%H:%M' --format '%T %w %f %e' -e modify,delete,create,attrib --excludei "(swp|swx)" /var/www | while read file; do
    echo ${file}
    done
    守护进程下echo无效。得把-d改成-m
    参考:http://wangchujiang.com/linux-command/c/inotifywait.html
    https://github.com/rvoicilas/inotify-tools/issues/5

    inotify 优点:

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

    inotify 缺点

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

    serysync功能多:(inotify+rsync命令)

    1)支持通过配置文件管理
    2)真正的守护进程socket
    3)可以对失败文件定时重传(定时任务功能)
    4)第三方的HTTP接口(例如:更新cdn缓存)
    5)默认多进程rsync同步
    参考:https://www.cnblogs.com/chensiqiqi/p/6542268.html

    相关文章

      网友评论

          本文标题:inotifywait文件监控

          本文链接:https://www.haomeiwen.com/subject/caosvftx.html