声明:博主使用的是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

insatll inotify

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

使用的测试命令:

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

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

/data/ CREATE erlianzhang.txt
/data/ OPEN erlianzhang.txt
/data/ ATTRIB erlianzhang.txt
/data/ CLOSE_WRITE,CLOSE erlianzhang.txt

创建文件的事件显示

创建目录监控事件(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

修改的事件显示

移动事件(move):

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

移动的事件显示

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

使用的命令:

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中inotify软件部署及参数事件演示的更多相关文章

  1. inotify软件部署及实时同步

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

  2. Linux中kettle自动化部署脚本

    自己写的一个自动化在Linux中部署kettle的脚本,包括一些遇到的问题在脚本中都有涉及. kettle是官网最新版本pdi-ce-6.1.0.1-196.zip 目前最新版本下载地址:https: ...

  3. linux中查看软件文件安装路径

    在linux中文件与软件一般都是安装在到/usr/share和/usr/local中了,如果我们需要查看软件安装路径linux为我们提供了查看命令,whereis 就可以帮我查找文件安装路径在哪里了 ...

  4. 查看linux中swap内存的相关参数

    内容主要来源于:linux的内存回收和交换 各项命令查看的linux环境是:Linux SUSE-33 2.6.32.12-0.7-defaul zone? 内存管理的相关逻辑都是以zone为单位的, ...

  5. linux中使用docker-compose部署软件配置分享

    本篇将分享一些 docker-compose 的配置,可参考其总结自己的一套基于docker的开发/生产环境配置. 安装docker及docker-compose install docker cur ...

  6. linux中安装软件,查看、卸载已安装软件方法

    各种主流Linux发行版都采用了某种形式的包管理系统(PMS)来控制软件和库的安装. 软件包存储在服务器上,可以利用本地Linux系统上的PMS工具通过互联网访问.这些服务器称为仓库. 由于Linux ...

  7. linux中安装软件的集中方法

    一.rpm包安装方式步骤: 引用:1.找到相应的软件包,比如soft.version.rpm,下载到本机某个目录:2.打开一个终端,su -成root用户:3.cd soft.version.rpm所 ...

  8. Linux 中安装软件报缺少共享库文件的错误

    linux 安装一些如软件 或者相关的模块时,经常报出缺少一些依赖包的 libxxx.so等的共享库文件 首先找到 该共享库文件 然后查看/etc/ld.so.conf 这个文件记录了编译时使用的动态 ...

  9. `ll/sc` 指令在`linux`中的软件实现

    load-link与store-conditional (LL/SC)是一对用于并发同步访问内存的CPU指令.Load-link返回内存位置处的当前值,随后的store-conditional在该内存 ...

随机推荐

  1. Pycharm配置

    平台:win10 x64 Pycharm的下载,安装,破解,编辑字体+配置IDE 详见博客:https://blog.csdn.net/yctjin/article/details/70307933? ...

  2. node.js获取参数的常用方法

    1.req.body 2.req.query 3.req.params 一.req.body例子 body不是nodejs默认提供的,你需要载入body-parser中间件才可以使用req.body, ...

  3. liunx Ubuntu 设置IP、网关、DNS

    说明:在网上给的教程上面通常会有这样的一个误导思路,按照配置文件设置后会不生效的问题,甚至没有一点效果,经过排查发现Linux下设置IP这个话题的入口线索应该分为两种:1为Server版,2为Desk ...

  4. 软件推荐-有限元开发软件FELAC

    首页:http://yuanjisuan.cn/ 有限元语言及其编译器(Finite Element Language And it’s Compiler),以下简称FELAC是中国科学院数学与系统科 ...

  5. php SQL 防注入的一些经验

    产生原因 一方面自己没这方面的意识,有些数据没有经过严格的验证,然后直接拼接 SQL 去查询.导致漏洞产生,比如: $id = $_GET['id']; $sql = "SELECT nam ...

  6. Centos7中docker开启远程访问

    在作为docker远程服务的centos7机器中配置: 1.在/usr/lib/systemd/system/docker.service,配置远程访问.主要是在[Service]这个部分,加上下面两 ...

  7. Android 追加写入文件的三种方法

    一.使用FileOutputStream 使用FileOutputStream,在构造FileOutputStream时,把第二个参数设为true public static void method1 ...

  8. PHP合并数组

    1.arrary_merge 示例代码: $arr1 = array(1, 2, 3, 4, 5); $arr2 = array(1, 2, 6, 7, 8, 9, 10); $result1 = a ...

  9. Swift5 语言指南(十一) 结构和类

    结构和类是通用的,灵活的结构,它们成为程序代码的构建块.您可以使用与定义常量,变量和函数相同的语法来定义属性和方法,以便为结构和类添加功能. 与其他编程语言不同,Swift不要求您为自定义结构和类创建 ...

  10. Linux - 变量的查看与设置

    printenv - print all or part of environment 显示所有变量:print 显示某个变量:print <variable name> 或者 echo ...