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

参考资料:

https://github.com/rvoicilas/inotify-tools/wiki

http://www.ibm.com/developerworks/cn/linux/l-inotifynew/

inotify--Linux .6内核中的文件系统变化通知机制

参考文档

安装inotify须知

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

[root@backup ~]# ll /proc/sys/fs/inotify/
total
-rw-r--r-- root root Oct : max_queued_events
-rw-r--r-- root root Oct : max_user_instances
-rw-r--r-- root root Oct : 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 

删除事件(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

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

inotify软件部署及实时同步的更多相关文章

  1. Linux中inotify软件部署及参数事件演示

    声明:博主使用的是CentOS6.9的系统 参考资料: https://github.com/rvoicilas/inotify-tools/wiki http://www.ibm.com/devel ...

  2. 烂泥:rsync与inotify集成实现数据实时同步更新

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 上篇文章我们介绍了如何使用rsync同步文件,这篇文章我们再来介绍下,如何把rsync与inotify集成实现数据的实时同步. 要达到这个目的,我们需要 ...

  3. rsync 与 inotify 的使用 & 实现实时同步备份

    今日内容 rsync 内容详细 上一篇内容问题 1.yum源问题 2.VPN链接正常,但是没办法通过172 3.VPN链接时,出现了DNS错误 4.掩码不对 5.openvpn开启错误 复制的命令 1 ...

  4. inotify+rsync架构实现实时同步

    前序 使用inotify+rsync架构实现(文件夹/文件)实时同步, 双机之间需要ssh免密码配置(两步完成ssh免密码登录) 环境 客户端:192.168.137.176 (rsync + ino ...

  5. rsync+inotify百万级文件实时同步

    实验环境:Centos7.4 目的:将源服务器的文件实时同步至目标服务器 源服务器:10.11.1.107 目标服务器:10.11.1.106 分别在两个节点安装rsync yum -y instal ...

  6. inotify与rsync实现实时同步记录文档

    目录 安装 配置 参考链接 安装 安装rsync yum -y install rsync 安装inotify-tools 这是一个实时监听文件变换的工具 wget -O /etc/yum.repos ...

  7. 使用rsync+inotify实现/www目录实时同步

    一.实现bak-server 1.1安装rsync # yum -y install rsync 1.2修改配置文件 # vi /etc/rsyncd.conf #添加下面内容 uid=test gi ...

  8. inotify+rsync sersync+rsync实时同步服务

    中小型网站搭建-数据实时的复制-inotify/sersync inotify是一种强大的,细粒度的.异步的文件系统事件监控机制(软件),linux内核从2.6.13起,加入inotify支持,通过i ...

  9. rsync+inotify实现数据的实时同步更新

    rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样 ...

随机推荐

  1. Hive中常用的查询命令

    日志数据的统计处理在这里反倒没有什么特别之处,就是一些 SQL 语句而已,也没有什么高深的技巧,不过还是列举一些语句示例,以示 hive 处理数据的方便之处,并展示 hive 的一些用法. a)    ...

  2. java 猜系统获取的随机数

    int randomNumber=(int)(Math.random()*8)+1; 注释是:得到一个1到8之间的随机整数. /************************************ ...

  3. 项目实战1—LNMP的搭建、nginx反向代理和缓存等的实现

    实战一:搭建lnmp及类小米等商业网站的实现 环境:关闭防火墙,selinux 1.安装包,开启服务 yum -y install nginx mariadb-server php-fpm php-m ...

  4. 再学习之MyBatis

    一.框架基本介绍 1.概念 支持普通SQL查询.存储过程和高级映射,简化和实现了Java 数据持久化层的的开源框架,主要流行的原因在于他的简单性和易使用性. 2.特点 持久层 .ORM(对象关系映射) ...

  5. 使用springboot完成密码的加密解密

    现今对于大多数公司来说,信息安全工作尤为重要,就像京东,阿里巴巴这样的大公司来说,信息安全是最为重要的一个话题,举个简单的例子: 就像这样的密码公开化,很容易造成一定的信息的泄露.所以今天我们要讲的就 ...

  6. 新建Vue项目

    新建Vue项目 1.安装Vue命令行工具,webpack和git,使用淘宝镜像CNPM.参考http://www.imooc.com/video/12299 2.打开命令行,进入到要存放的目录,win ...

  7. Python [习题] 字典扁平化

    习题: 将以下字典扁平化,输出为 target 字典格式source = {'a': {'b': 1, 'c': 2}, 'd': {'e': 3, 'f': {'g': 4}}}target = { ...

  8. python3学习笔记(3)

    一.内置函数补充1.callable()检测传递的参数是否可以被调用.def f1() pass可以被调用f2 = 123不可以被调用2.chr()和ord()chr()将ascii码转换成字符,or ...

  9. 拼写纠错的利器,BK树算法

    BK树或者称为Burkhard-Keller树,是一种基于树的数据结构,被设计于快速查找近似字符串匹配,比方说拼写纠错,或模糊查找,当搜索”aeek”时能返回”seek”和”peek”. 本文首先剖析 ...

  10. appium+Android studio安装与配置

    一. 关于JDK 安装,以及Java环境的设置 1.下载JDK1.6,选择对应的安装路径 2.配置相应的Java 环境变量 A.属性名称:JAVA_HOME (sdk的安装目录) 属性值:C:Prog ...