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
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软件部署及实时同步的更多相关文章
- Linux中inotify软件部署及参数事件演示
声明:博主使用的是CentOS6.9的系统 参考资料: https://github.com/rvoicilas/inotify-tools/wiki http://www.ibm.com/devel ...
- 烂泥:rsync与inotify集成实现数据实时同步更新
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 上篇文章我们介绍了如何使用rsync同步文件,这篇文章我们再来介绍下,如何把rsync与inotify集成实现数据的实时同步. 要达到这个目的,我们需要 ...
- rsync 与 inotify 的使用 & 实现实时同步备份
今日内容 rsync 内容详细 上一篇内容问题 1.yum源问题 2.VPN链接正常,但是没办法通过172 3.VPN链接时,出现了DNS错误 4.掩码不对 5.openvpn开启错误 复制的命令 1 ...
- inotify+rsync架构实现实时同步
前序 使用inotify+rsync架构实现(文件夹/文件)实时同步, 双机之间需要ssh免密码配置(两步完成ssh免密码登录) 环境 客户端:192.168.137.176 (rsync + ino ...
- rsync+inotify百万级文件实时同步
实验环境:Centos7.4 目的:将源服务器的文件实时同步至目标服务器 源服务器:10.11.1.107 目标服务器:10.11.1.106 分别在两个节点安装rsync yum -y instal ...
- inotify与rsync实现实时同步记录文档
目录 安装 配置 参考链接 安装 安装rsync yum -y install rsync 安装inotify-tools 这是一个实时监听文件变换的工具 wget -O /etc/yum.repos ...
- 使用rsync+inotify实现/www目录实时同步
一.实现bak-server 1.1安装rsync # yum -y install rsync 1.2修改配置文件 # vi /etc/rsyncd.conf #添加下面内容 uid=test gi ...
- inotify+rsync sersync+rsync实时同步服务
中小型网站搭建-数据实时的复制-inotify/sersync inotify是一种强大的,细粒度的.异步的文件系统事件监控机制(软件),linux内核从2.6.13起,加入inotify支持,通过i ...
- rsync+inotify实现数据的实时同步更新
rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样 ...
随机推荐
- rsync远程数据同步工具的使用
准备工作 虚拟机1: 192.168.24.41, 用于搭建rsync服务器 虚拟机2: 192.168.26.68, 用于搭建rsync客户端 虚拟机1和虚拟机2均为centos7; 1. 检查虚拟 ...
- html5页面实现点击复制功能
在实际工作中,有时候会遇到这样的需求,页面上有一个链接,不需要选中链接内容,只需要点击复制按钮,就可以把链接内容复制到剪切板.这时候可以使用clipboard插件来实现.以下是一个简单的demo. 首 ...
- Web前端性能优化全攻略[转载]
1. 尽量减少 HTTP 请求 (Make Fewer HTTP Requests) 作为第一条,可能也是最重要的一条.根据 Yahoo! 研究团队的数据分析,有很大一部分用户访问会因为这一条而取得最 ...
- ⒃bootstrap组件 轮播图 基础案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- HTML学习笔记 CSS表格及轮廓案例 第八节 (原创)参考使用表
#tb, tb1, tr, th, td { border: 5px solid blue; /*加边框*/ padding: 5px; /*内边距*/ } #tb1 { border-collaps ...
- VS2013创建Windows服务
一.创建服务 1.文件->新建->项目->windows桌面->windows服务,修改你要的项目名称.我这不改名,仍叫WindowsService1,确定. 2.其中的Pro ...
- 一起写框架-Ioc内核容器的实现-基础功能-getBean(五)
实现的功能 1. 启动程序时,将@ComponentScan加载的类,创建对象并放在容器里面.(查看上一篇文) 2. 通过ApplicatoinContext的getBean()方法获得容器里面的对象 ...
- winscp连接虚拟机Linux被拒绝的问题解决方案
输入了正确的账号密码还出现这个错误 我们需要在虚拟机中配置一下,改成这样就行了
- 深入理解java虚拟机_第二章_读书笔记
1.本章内容目录: 概述 运行时数据区域 程序计数器 java虚拟机栈 本地方法栈 java堆 方法区 运行时常量池 直接内存 HotSpot虚拟机对象探秘 对象的创建 对象的内存布局 对象的访问定位 ...
- Breadth-first search 算法(Swift版)
在讲解Breadth-first search 算法之前,我们先简单介绍两种数据类型Graph和Queue. Graph 这就是一个图,它由两部分组成: 节点, 使用圆圈表示的部分 边, 使用线表示的 ...