zoukankan      html  css  js  c++  java
  • Rsync+inotify详解

    Rsync+inotify详解
    
    inotify是什么
    Inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了inotify支持,通过inotify可以监控文件系统中添加、删除,修改、
    移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化,而inotify-tools正是实现这种监控的软件
    
    特别说明:inotify配置是建立在rsync服务基础上的配置过程。
    
    1、查看当前系统是否支持inotify
    [root@ansb01 tmp]# uname -r
    3.10.0-1160.25.1.el7.x86_64
    
    [root@ansb01 tmp]# ls -l /proc/sys/fs/inotify/
    总用量 0
    -rw-r--r-- 1 root root 0 10月  5 16:00 max_queued_events
    -rw-r--r-- 1 root root 0 10月  5 16:00 max_user_instances
    -rw-r--r-- 1 root root 0 10月  5 16:00 max_user_watches
    
    # 显示这三个文件则证明支持
    # max_queued_events 表示调用inotify时分配到inotify instance中可排队的event数的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件
    # max_user_instances 表示每一个real user ID可以创建的inotify instatnces数量的上限
    # max_user_watches  表示每个inotify实例相关联的watches的上限,也就是每个inotify实例可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况适当增加此值的大小
    例如:
    echo 30000000 > /proc/sys/fs/inotify/max_user_watches
    
    2.安装inotify
    [root@ansb01 tmp]# yum -y install inotify-tools
    
    inotify-tools安装后会得到inotifywait和inotifywatch这两条命令
    inotifywait命令可以用来收集有关文件访问信息,Linux发行版一般没有包括这个命令,需要安装inotify-tools,这个命令还需要将inotify支持编译入Linux内核,好在大多数Linux发行版都在内核中启用了inotify。
    inotifywatch命令用于收集关于被监视的文件系统的统计数据,包括每个 inotify 事件发生多少次。
    
    3.inotifywait命令参数
    -m  是要持续监视变化。
    -r  使用递归形式监视目录。
    -q  减少冗余信息,只打印出需要的信息。
    -e  指定要监视的事件列表。
    --timefmt 是指定时间的输出格式。
    --format  指定文件变化的详细信息。
    –timefmt 说明:
    Ymd分别表示年月日,H表示小时,M表示分钟
    –format 说明:
    参数  说明
    %w  表示发生事件的目录
    %f  表示发生事件的文件
    %e  表示发生的事件
    %Xe 事件以“X”分隔
    %T  使用由–timefmt定义的时间格式
    
    可监控的事件:
    
    参数    说明
    access  访问,读取文件。
    modify  修改,文件内容被修改
    attrib  属性,文件元数据被修改。
    move    移动,对文件进行移动操作。
    create  创建,生成新文件
    open    打开,对文件进行打开操作
    close   关闭,对文件进行关闭操作。
    delete  删除,文件被删除。
    
    更详细的介绍请参看man inotifywait
    
    
    
    案例1:例如监控客户端/tmp目录,当/tmp目录有文件新增时,会显示新增文件
    [root@ansb01 tmp]# inotifywait -mqr --timefmt '%Y%m%d %H:%M' --format '%T %w%f' -e create /tmp/
    20211005 16:43 /tmp/9.txt
    20211005 16:45 /tmp/11.txt
    
    案例2:监控create delete事件,当删除9.txt 11.txt时
    [root@ansb01 tmp]# inotifywait -mqr --timefmt '%Y%m%d %H:%M' --format '%T %w%f' -e create,delete /tmp/
    20211005 16:46 /tmp/9.txt
    20211005 16:46 /tmp/11.txt
    
    
    案例3:简化事件输出,去掉时间格式输出
    [root@ansb01 tmp]# inotifywait -mqr --format '%w%f' -e create,delete /tmp/
    /tmp/8.txt
    
    
    #!/bin/bash
    # rsync-inotify.sh
    src=/tmp
    inotifywait -mrq --format '%w%f' -e create,delete,close_write $src 
    |while read file
    do
      cd $src && rsync -zva ./ --delete rsync_backup@192.168.138.20::backup --password-file=/etc/rsync.password
    done
    

      

  • 相关阅读:
    上传项目到githug
    架构漫谈阅读笔记01
    连接清华镜像
    Java-Spark
    推荐系统
    数据湖技术
    如何做好架构划分
    构建之法阅读笔记 02
    构建之法阅读笔记01
    Tensorflow安装
  • 原文地址:https://www.cnblogs.com/zhouzhiguo/p/15375827.html
Copyright © 2011-2022 走看看