什么是inotify?

  拥有强大、粒细粒度、异步文件系统事件监控机制,监控文件系统中添加、删除、修改、移动等各种事件

  版本支持: 内核 2.6.13以上版本,inotify-tools 是实施监控的软件

  同类软件: 国人 周洋 在金山公司开发sersync

inotify环境搭建

  1. rsync服务器 rsync --daemon 已经搭建

  2. 检查客户端是否支持

uname -r                             # 检查内核版本是否大于2.6.13

ls -l /proc/sys/fs/inotify        # 检查是否有这个目录,没有支持不了

rpm -aq inotify-tools            # 检查软件是否安装

# 没安装通过 yum install -y inotify-tools 安装

# 如果这个安装不了,安装阿里的epel源

# rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-6.noarch.rpm

  3. 这个软件安装了两个命令 inotifywait 和 inotifywatch

这两个命令有什么区别?

inotifywait

    在被监控的文件或目录上等待文件系统事件,执行后处于堵塞状态,适合在shell脚本中

  重要的参数: man inotifywait

  -m                 # 始终保持事件监听状态

   -e                  # 指定文件系统事件, close_write 关闭写

  # 写文件过程: 打开文件,写文件,关闭文件

  -r                   # 递归查询目录

   -q                  # 打印很少信息,只打印监控事件的信息

  --timefmt       # 格式化时间显示 %y/%m%d %H:%M

  --format        # %T %w%f   显示更改文件名格式

  inotifywatch:

    统计文件系统时间发生次数,做统计

inotify简单使用
       1. 监控
/data目录

inotifywait -mrq --timefmt '%Y/%m/%d %H:%M' --format '%T %w%f' -e create /data/

# 这个只监控 create
# delete 删除,删除并不需要打开文件; close_write 追加、修改文件、新增文件

2. 往 /data 目录下写文件,将会看到输出

如何做实时备份?

当 inotify 监控到目录触发事件,然后触发 rsync备份

写一个脚本

mkdir /server/scripts -p             # 创建脚本目录
cd /server/scripts vim realtime_rsync_nfs.sh # 创建实时备份脚本
#!/bin/bash
# realtime rsync /data to backup
# master beimenchuixue monitor_dir=/data/
backup_ip=172.16.1.15
login_user=backup_rsync
moudel_name=backup
rsync_passwd_file=/etc/rsync.password /usr/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete $monitor_dir \
|while read file
do
/usr/bin/rsync -avz $monitor_dir --delete $login_user@$backup_ip::$moudel_name --password-file=$rsync_passwd_file
done

  

sh -x realtime_rsync_nfs.sh      # 测试

  

NFS备份可以考虑 --delete 方式,要求无差异备份

还有个命令也可以检测目录变化 watch

linux_inotify的更多相关文章

随机推荐

  1. 你知道BFC、IFC、FFC、GFC及多栏自适应布局吗?

    FC(Formatting Context)格式化内容,常见的FC有BFC.IFC.FFC.GFC四种类型,BFC和IFC是W3C CSS2.1规范提出的概念,FFC和GFC是W3C CSS3规范提出 ...

  2. ASP.NET MVC 设置区域默认定向

    public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "m_defau ...

  3. 设计模式(三)装饰者模式Decorator

    装饰者模式针对的问题是:对一个结构已经确定的类,在不改变该类的结构的情况下,动态增加一些功能. 一般来说,都是对一些已经写好的架构增加自己的功能,或者应对多种情况,增加功能. 我们还是来玩一句红警,首 ...

  4. Appium 命令行模式下遇到的问题总结及解决方案 npm ERR! tar.unpack unzip(或者untar) error

    安装了GUI Appium后,卸载删除问题后,使用命令行模式安装. 一. 遇到问题: nalideMacBook-Pro:~ nali$ npm install -g appium npm ERR! ...

  5. Android studio签名与代码混淆

    签名: 应用程序升级:应用程序模块化:代码或者数据共享 混淆:混淆器将代码中的所有变量.函数.类的名称变为简短的英文字母代号,而混淆后的代码很难被反编译,即使反编译成功也很难得出程序的真正语义.

  6. 使用redis设计一个简单的分布式锁

    最近看了有关redis的一些东西,了解了redis的一下命令,就记录一下: redis中的setnx命令: 关于redis的操作命令,我们一般会使用set,get等一系列操作,数据结构也有很多,这里我 ...

  7. 浅谈JavaScript的面向对象程序设计(四)

    本文继续讲解JavaScript的面向对象程序设计.继承是面向对象语言中的一个基本概念,面向对象语言支持两种继承实现方式:接口继承和实现继承.接口继承只继承方法签名,而实现继承则继承实际的方法.但是在 ...

  8. 【Tarjan缩点】POJ2186 Popular Cows

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 35644   Accepted: 14532 De ...

  9. 【深度学习系列】关于PaddlePaddle的一些避“坑”技巧

    最近除了工作以外,业余在参加Paddle的AI比赛,在用Paddle训练的过程中遇到了一些问题,并找到了解决方法,跟大家分享一下: PaddlePaddle的Anaconda的兼容问题 之前我是在服务 ...

  10. JavaScript(二)基本概念

    JS区分大小写 html/css 中 标签选择器不区分大小写 id class 选择器区分大小写 其中属性名 属性名 属性值  不区分大小写 行间事件  onclick  等  不区分大小写 而  执 ...