• inotify软件部署及实时同步


    声明:博主使用的是CentOS6.9的系统

    参考资料:

    https://github.com/rvoicilas/inotify-tools/wiki
    
    http://www.ibm.com/developerworks/cn/linux/l-inotifynew/
    
    inotify--Linux 2.6内核中的文件系统变化通知机制
    参考文档

    安装inotify须知

    首先,在安装inotify软件之前一定要确认系统中,必须要存在的三个文件

    [root@backup ~]# ll /proc/sys/fs/inotify/
    total 0
    -rw-r--r-- 1 root root 0 Oct 17 10:13 max_queued_events
    -rw-r--r-- 1 root root 0 Oct 17 10:13 max_user_instances
    -rw-r--r-- 1 root root 0 Oct 17 10:13 max_user_watches
    max_user_watches     ----默认数值8192,设置inotifywait和inotifywatch命令可以监控的文件数量(单进程情况)
    max_user_instances     ----默认数值128,设置每个用户可以运行的inotifywait和inotifywatch命令的进程数
    max_queued_events     ----默认数值16384,设置inotify实例事件,队列可容纳的事件数量
    安装前的三个重要文件

    具体想要知道三个文件的作用可以使用man帮助查看

    inotify软件主要工具命令

    —共安装了 2个工具(命令),即inotifywait和inotifywatch 
    inotifywait : 在被监控的文件或目录上等待特定文件系统事件(open close delete等)发生,执行后处于阻塞状态,适合在shell脚本中使用 
    inotifywatch : 收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计。 
    说明:yum安装后可以直接使用,如栗编译安装需要进入到相应软件目录的bin目录下使用 
    #命令man手册说明 
    # man inotifywait inotifywait - wait for changes to files using inotify 
    使用inotify进行监控,等待产生变化的文件信息 
    # man inotifywatch inotifywatch - gather filesystem access statistics using inotify 
    使用inotify进行监控,收集文件系统访问统计信息
    inotify两个主要命令

    相关参数

    命令参数

    参数说明

    -m|--montitor

    (重要参数)

    始终保持事件监听状态

    -d|--daemon

    类似与-m,只是将命令运行在后台

    -r

    (重要参数)

    递归监控目录数据信息变化

    -o|--outfile<file>

    打印事件到文件中,相当于标准输出

    -s|--syslog

    发送错误到syslog相当于错误输出

    -q|--quiet

    (重要参数)

    输出少量信息(只打印事件信息)

    --excludei<pattern>

    (重要参数)

    排除文件或目录    i不区分大小写

    --timefmt<fmt>

    (重要参数)

    指定时间输出格式

    --format<fmt>

    打印使用指定的输出类似格式字符串;即实际监控输出的内容

    -e

    (重要参数)

    指定监听指定的事件,省略不加,表示所有事件都监听

    --timefmt<fmt>可用参数

    命令参数

    参数说明

    %d (重要参数)

    每月的第几天,显示信息为十进制数(范围是01-31)

    %m (重要参数)

    显示月份,显示信息为十进制数(范围是01-12)

    %M

    显示分钟,显示信息为十进制数(范围是00-59)

    %y (重要参数)

    年份信息,显示信息为十进制数,并且没有世纪信息

    %Y

    年份信息,显示信息为十进制数,并且包含世纪信息

    %H

    小时信息,显示信息为十进制数,使用24小时制(范围是00-23)

    说明:以上信息可以通过man strftime 信息获取

    --format<fmt>可用参数

    命令参数

    参数说明

    %w (重要参数)

    事件出现时,监控文件或目录的名称信息

    %f (重要参数)

    事件出现时,将显示监控目录下触发事件的文件或目录信息,否则为空。

    %e (重要参数)

    显示发生的事件信息,不同的事件信息用逗号进行分隔

    %Xe

    显示发生的事件信息,不同的事件信息用X进行分隔,可以修改X为指定分隔符

    %T (重要参数)

    这个格式是通过strftime函数进行匹配时间格式信息的

    说明:以上信息可以通过man inotifywait信息中,查询-format参数进行获取得知

    监控中事件说明

    事件名称

    事件说明

    access

    文件或目录内容被读取

    modify

    文件或目录内容被写入

    attrib

    文件或目录属性改变

    close_write

    (重要参数)

    文件或目录关闭,在写入模式打开之后关闭的。

    close_nowrite

    文件或目录关闭,在只读模式打开之后关闭的

    close

    文件或目录关闭,不管读或是写模式

    open

    文件或目录被打开

    moved_to

    文件或目录被移动到监控的目录中

    moved_from

    文件或目录被移动出监控的目录中

    move

    (重要参数)

    文件或目录不管移动到或是移动出监控目录都触发事件

    create

    (重要参数)

    文件或目录创建在监控的目录中

    delete

    (重要参数)

    文件或目录被删除在监控的目录中

    delete_self

    文件或目录被删除

    unmount

    文件系统包含的文件或目录不能卸载

    重要监控事件参数汇总表

    重要事件

    包含事件

    备注说明

    close

    close_write

    文件或目录关闭,不管读或是写模式即包含写关闭与读关闭

    close_nowrite

    close_write

    create

    包含文件创建事件,但不包含目录创建事件

    move

    moved_to

    文件或目录不管移动到或是移动出监控目录都触发事件即包含信息移入或移出监控目录事件

    moved_from

    重要参数汇总:根据以上说明,在实际使用时,只要监控以下事件即可

    create 创建、 delete 删除、 moved_to 移入、 close_write 修改

    inotify软件部署

    在安装inotify之前首先要确认rsync服务是否安装部署好

    inotify的安装

    [root@nfs01 data]# yum install -y inotify-tools
    [root@nfs01 data]# rpm -ql inotify-tools
    /usr/bin/inotifywait
    /usr/bin/inotifywatch
    yum安装inotify

    安装完成后,进行监控测试

    使用的测试命令:

    inotifywait -mr  /data/  --format "%w%f 事件信息: %e" -e create,delete,moved_to,close_write
    测试监控

    创建文件监控事件(create):

    /data/ CREATE oldboy.txt
    
    /data/ OPEN oldboy.txt
    
    /data/ ATTRIB oldboy.txt
    
    /data/ CLOSE_WRITE,CLOSE oldboy.txt
    create

    创建目录监控事件(create):

    /data/ CREATE,ISDIR 1

     删除事件(delete):

    /data/o1.txt 事件信息: DELETE

    修改事件(close_write):

    /data/oldgirl.txt    事件信息: CLOSE_WRITE@CLOSE
    
    /data/.oldgirl.txt.swx 事件信息: CLOSE_WRITE@CLOSE
    
    /data/.oldgirl.txt.swx 事件信息: DELETE
    
    /data/.oldgirl.txt.swp 事件信息: CLOSE_WRITE@CLOSE
    
    /data/.oldgirl.txt.swp 事件信息: DELETE
    
    /data/.oldgirl.txt.swp 事件信息: CLOSE_WRITE@CLOSE
    
    /data/.oldgirl.txt.swp 事件信息: DELETE
    close_write

    移动事件(move):

    移动进来
    /data/hosts 事件信息: MOVED_TO
    移动出去
    /data/hosts 事件信息: MOVED_FROM
    move

    利用脚本实现简单的实时同步

    使用的命令:

    rsync服务: rsync -az /data/ rsync_backup@172.16.1.41::nfsbackup --password-file=/etc/rsync.password
    
    inotify服务:inotifywait -mrq /data --format "%w%f" -e create,delete,moved_to,close_write
    需要使用的命令
    #!/bin/bash
    
    inotifywait -mrq /data --format "%w%f" -e create,delete,moved_to,close_write|while read line
    do
    rsync -az --delete /data/ rsync_backup@172.16.1.41::nfsbackup --password-file=/etc/rsync.password
    done
    实时同步脚本

    此脚本太过简单,想要让其在后台运行可以使用screen、&等方式。

    博主能力有限,如果还想要更丰富的功能需要自己完善脚本

    inotify优点

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

    inotify缺点

    • 并发如果大于200个文件(4-100 k ),同步就会有延迟
    • 前面写的脚本,每次都是全部推送一次,但确实是増量的。也可以只同步变化的文件,不变化的不理。
    • 监控到事件后,请用rsync同步是单线程的(加&并发),sersync是多线程同步。

    如果拿inotify与sersync相比,博主推荐使用sersync

    能力有限,不好的地方请大家多多提议

  • 相关阅读:
    linux下使用kermi续
    关于vhdl中integer消耗资源的一些讨论
    linux时间编程
    Linux下C编程文件编程
    C语言I博客作业04
    C语言I博客作业02
    C语言I博客作业02
    第一周作业
    php 面向对象
    php 面向对象封装和继承
  • 原文地址:https://www.cnblogs.com/lyq863987322/p/8023375.html
Copyright © 2020-2023  润新知