Linux中inotify软件部署及参数事件演示
声明:博主使用的是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软件部署及参数事件演示的更多相关文章
- inotify软件部署及实时同步
声明:博主使用的是CentOS6.9的系统 参考资料: https://github.com/rvoicilas/inotify-tools/wiki http://www.ibm.com/devel ...
- Linux中kettle自动化部署脚本
自己写的一个自动化在Linux中部署kettle的脚本,包括一些遇到的问题在脚本中都有涉及. kettle是官网最新版本pdi-ce-6.1.0.1-196.zip 目前最新版本下载地址:https: ...
- linux中查看软件文件安装路径
在linux中文件与软件一般都是安装在到/usr/share和/usr/local中了,如果我们需要查看软件安装路径linux为我们提供了查看命令,whereis 就可以帮我查找文件安装路径在哪里了 ...
- 查看linux中swap内存的相关参数
内容主要来源于:linux的内存回收和交换 各项命令查看的linux环境是:Linux SUSE-33 2.6.32.12-0.7-defaul zone? 内存管理的相关逻辑都是以zone为单位的, ...
- linux中使用docker-compose部署软件配置分享
本篇将分享一些 docker-compose 的配置,可参考其总结自己的一套基于docker的开发/生产环境配置. 安装docker及docker-compose install docker cur ...
- linux中安装软件,查看、卸载已安装软件方法
各种主流Linux发行版都采用了某种形式的包管理系统(PMS)来控制软件和库的安装. 软件包存储在服务器上,可以利用本地Linux系统上的PMS工具通过互联网访问.这些服务器称为仓库. 由于Linux ...
- linux中安装软件的集中方法
一.rpm包安装方式步骤: 引用:1.找到相应的软件包,比如soft.version.rpm,下载到本机某个目录:2.打开一个终端,su -成root用户:3.cd soft.version.rpm所 ...
- Linux 中安装软件报缺少共享库文件的错误
linux 安装一些如软件 或者相关的模块时,经常报出缺少一些依赖包的 libxxx.so等的共享库文件 首先找到 该共享库文件 然后查看/etc/ld.so.conf 这个文件记录了编译时使用的动态 ...
- `ll/sc` 指令在`linux`中的软件实现
load-link与store-conditional (LL/SC)是一对用于并发同步访问内存的CPU指令.Load-link返回内存位置处的当前值,随后的store-conditional在该内存 ...
随机推荐
- MFC中List控件动态填充数据(LVN_GETDISPINFO)
在使用List控件的过程中,有时候List控件中需要添加大量的数据,如果使用InsertItem填充,会一次性将数据全部添加进List控件中,比较耗时.这里记录下如何动态添加List控件数据. 步骤 ...
- ABP框架系列之十三:(Authorization-授权)
Introduction Almost all enterprise applications use authorization in some level. Authorization is us ...
- Pattern Design - Strategy Pattern
If you can disassemble code and you want to apply one method of an object in another object that t ...
- Word中带圈数字
写论文时常常要求输入带圈数字,先在Word中输入代码,选中代码后按Alt+X(然后再粘贴到Excel中) 符号 代码⓪ 24ea① 2460② 2461③ 2462④ 2463⑤ 2464⑥ 2465 ...
- C语言小程序——推箱子(窄字符和宽字符)
C语言小程序——推箱子(窄字符Version) 推箱子.c #include <stdio.h> #include <conio.h> #include <stdlib. ...
- 第一篇:服务的注册与发现Eureka(Finchley版本)
一.创建服务注册中心(Eureka) 1. 首先创建一个maven主工程 创建一个主Maven工程,在其pom文件引入依赖,spring Boot版本为2.0.3.RELEASE,Spring Clo ...
- MySQL数值类型
MySQL数值类型 MySQL支持所有标准的SQL数值数据类型.这些类型包括数值数据类型INTEGER.SMALLINT.DECIMAL.NUMERIC和近似数值数据类型FLOAT.REAL.DOUB ...
- 从github clone文件: Failed to receive SOCKS4 connect request ack.
安装了代理,能上网,也能从github上下载文件,就是无法从github上clone文件, 查了很久资料后,终于发现使用sudo可以解决问题.不过,不知道原因是什么? 比如:git clone htt ...
- Postgresql ---plv8扩展(windows下安装过程)
Postgresql下plv8安装过程其实很简单,但是在网络上搜集了半天都没有找到一篇满意的安装文档,现在总结如下: 1.下载和PostgreSQL相对应的plv8版本,下载地址如下: http:// ...
- go 通过http发送图片file内容
package main import ( "encoding/json" "fmt" "io/ioutil" "net/http ...