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在该内存 ...
随机推荐
- Aizu 0525 Osenbei 搜索 A
Aizu 0525 Osenbei https://vjudge.net/problem/Aizu-0525 题目: IOI製菓では,創業以来の伝統の製法で煎餅(せんべい)を焼いている.この伝統の製法 ...
- Codeforces Round #539 (Div. 2) D 思维
https://codeforces.com/contest/1113/problem/D 题意 将一个回文串切成一段一段,重新拼接,组成一个新的回文串,问最少切几刀 题解 首先无论奇偶串,最多只会切 ...
- 05-使用jQuery操作input的value值
表单控件是我们的重中之重,因为一旦牵扯到数据交互,离不开form表单的使用,比如用户的注册登录功能等 那么通过上节知识点我们了解到,我们在使用jquery方法操作表单控件的方法: $(selector ...
- Alpha阶段项目复审(冲鸭队)
Alpha阶段项目复审(冲鸭队) 组名 优点 缺点 排名 天冷记得穿秋裤队 支持文件离线开源下载,没有限速 部分功能未实现 1 中午吃啥队 点餐系统用户需求较高,系统功能完善 界面可以再完善一下些 2 ...
- utf-8转gb2312
近日在对一个json串进行转码时,显示中文乱码,原因是json串编码方式为utf-8,而我程序在windows上采用的是多字节编码方式,即采用gb2312编码.这里就存在一个utf-8到gb2312的 ...
- ESB结合门户Portlet实现数据分析
1 背景概述 笔者在公司做集成项目时,通常会涉及ESB与Portal结合实现图表数据分析功能.通过ESB获取数据库信息,然后在门户上采用Portlet接收ESB中的数据URL最后展现到门户上.本文为项 ...
- Thinking in Java from Chapter 21
From Thinking in Java 4th Edition 并发 线程可以驱动任务,因此你需要一种描述任务的方式,这可由Runnable接口来提供. 要想定义任务,只需要实现Runnable接 ...
- MySQL的时间、日期型
MySQL的时间.日期型 MySQL中表示时间值的有DATE.时间类型为DATETIME.DATE.TIMESTAMP.TIME和YEAR.每个时间类型有一个有效值范围和一个"零" ...
- 自学vue笔记 (二) : 实例与生命周期
一: 什么是实例 我们说了,Vue 应用都应该从构建一个 Vue 实例开始.它管理着挂载在它身上的所有内容,因此实例是一个根实例, 所有的组件都应该挂载在根实例上面.创建一个 Vue 实例,需要通过 ...
- LeetCode:94_Binary Tree Inorder Traversal | 二叉树中序遍历 | Medium
题目:Binary Tree Inorder Traversal 二叉树的中序遍历,和前序.中序一样的处理方式,代码见下: struct TreeNode { int val; TreeNode* l ...