Linux中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软件之前一定要确认系统中,必须要存在的三个文件

[[email protected] ~]# 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的安装

[[email protected] data]# yum install -y inotify-tools
[[email protected] 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 1

删除事件(delete):

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

修改事件(close_write):

/data/oldgirl.txt    事件信息: [email protected]
/data/.oldgirl.txt.swx 事件信息: [email protected]
/data/.oldgirl.txt.swx 事件信息: DELETE
/data/.oldgirl.txt.swp 事件信息: [email protected]
/data/.oldgirl.txt.swp 事件信息: DELETE
/data/.oldgirl.txt.swp 事件信息: [email protected]
/data/.oldgirl.txt.swp 事件信息: DELETE

修改的事件显示

移动事件(move):

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

移动的事件显示

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

使用的命令:

rsync服务: rsync -az /data/ [email protected]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/ [email protected]172.16.1.41::nfsbackup --password-file=/etc/rsync.password
done

脚本

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

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

inotify优点

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

inotify缺点

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

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

不好的地方请大家多多提议

时间: 2024-10-10 17:09:02

Linux中inotify软件部署及参数事件演示的相关文章

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

在linux中文件与软件一般都是安装在到/usr/share和/usr/local中了,如果我们需要查看软件安装路径linux为我们提供了查看命令,whereis 就可以帮我查找文件安装路径在哪里了. 我想查看我的oracel数据库安装在哪里 一.查看文件安装路径:这里以Oracle为例.比如说我安装了Oracle,但是不知道文件都安装在哪些地方.放在哪些文件夹里,可 以用下面的命令查看所有的文件路径 二.查询运行文件所在路径: 如果你只要查询文件的运行文件所在地址,直接用下面的命令就可以了(还

Linux中kettle自动化部署脚本

自己写的一个自动化在Linux中部署kettle的脚本,包括一些遇到的问题在脚本中都有涉及. kettle是官网版本pdi-ce-6.1.0.1-196.zip 脚本: #!/bin/bash #Record the current directory! mulu=`pwd` #The output of JAVA_HOME number of bytes c=`echo $JAVA_HOME|wc -c` echo "Tips:Install JDK rather than JRE!Confi

Linux中的软件管理

在Linux中,会涉及到相关软件的使用来方便我们,那么软件如何下载呢,如下将做详细的介绍. ####一.软件名称识别#### [abrt-addon-ccpp]-[2.1.11-19].[el7].[x86_64].rpm     ##rpm结尾的适用与redhat操作系统 ||     ||     ||    || 软件名称   软件版本软件适用系统 64位 ####二.如何安装软件#### 1.rpm 底层软件下载工具,需要指明软件存放的位置,而且不能自主解决依赖性 rpm      -i

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

内容主要来源于:linux的内存回收和交换 各项命令查看的linux环境是:Linux SUSE-33 2.6.32.12-0.7-defaul zone? 内存管理的相关逻辑都是以zone为单位的,这里zone的含义是指内存的分区管理.Linux将内存分成多个区,主要有直接访问区(DMA).一般区(Normal)和高端内存区(HighMemory).内核对内存不同区域的访问因为硬件结构因素会有寻址和效率上的差别.如果在NUMA架构上,不同CPU所管理的内存也是不同的zone. /proc/zo

linux中安装软件

        作为一名屌丝php程序员,那么你或多或少的要接触linux命令,曾经我们也许熟悉FreeBSD,但是并不代表我们能用好它,所以,还是老老实实的把自己学习过程中的笔记分享下,我们经常听说linux安装非常简单,但是你知道有多少种方式吗?有人说源码安装,有人说rpm包安装,有人说是脚本,有人说是yum,那么真有这么多的安装?每个之间的优点和缺点呢?想想都后怕,只能慢慢去深入了,先学会用为主,不懂的知识,我们有谷歌和百度,还可以拿个梯子去找你所想要的,只有你不努力,没有你做不到的(当时

Linux中MySQL配置文件my.cnf参数优化

MySQL参数优化这东西不好好研究还是比较难懂的,其实不光是MySQL,大部分程序的参数优化,是很复杂的.MySQL的参数优化也不例外,对于不同的需求,还有硬件的配置,优化不可能又最优选择,只能慢慢的进行优化,需要不断的调试,才能达到不同环境的最优选择. 首先介绍一下MySQL配置文件中不同模块 [client] MySQL客户端应用模块,只有MySQL附带的客户端应用程序保证可以读取此模块下的内容. [mysqld] MySQL服务端应用模块 [client] port = 3306 sock

Linux中服务器软件为什么需要编译安装

为什么服务器软件需要编译安装?一个流传很广的说法是编译安装性能更好,其实这是个谣言. 服务器CPU事实已经被Intel垄断了,就那么几种型号,编来编去生成的机器码是一样的.Intel宣传自己的编译工具Intel C++ Compiler 比GCC编译出来性能要提升10%-20%,这就是一广告,生产环境很少用人用它,何况它还要收费. 性能真不是问题,比如 strip 命令可以大大减小可执行文件的size,但是我装过几千遍软件,都没有见有人在安装脚本里面使用. 软件需要编译安装的真实理由有如下3点:

LINUX中lrzsz软件的使用

安装lrzsz 可以在Linux 和 windows直接相互传文件 Linux无论ssh跳过去也可以sz rz打开图像进行传输文件 [[email protected] ~]# yum install lrzsz已加载插件:langpacks, product-id, search-disabled-repos, subscription-managerThis system is not registered with an entitlement server. You can use su

Linux中./configure,make,make install的作用

对LINUX中安装软件使用./configure,make,make install的解释: 例如:   Shell>tar zxvf libevent-1.4.14b-stable.tar.gz      Shell>cd libevent-1.4.14b-stable      Shell>./configure      Shell>make && make install  (1)./configure是检测安装平台的目标特征的.比如它会检测你是不是有CC或