【Linux】循序渐进学运维-服务篇-inotify部署及应用

十年热恋 提交于 2020-08-18 02:45:57

大家好,我是高胜寒,本文是Linux运维-循序渐进学运维-服务篇的第11篇文章

前言

上几篇文章,我们探讨了rsync的使用,今天开始我们来聊聊那些可以与rsync结合使用的工具,今天我们主要来探讨inotify。 如果你还不了解rsync相关的内容,可以点击下方连接进行了解学习:
rsync系列文章:

【Linux】循序渐进学运维-服务篇-rysnc原理

【Linux】循序渐进学运维-服务篇-rysnc安装及使用

【Linux】循序渐进学运维-服务篇-rsync配置文件

【Linux】循序渐进学运维-服务篇-rsync实战

inotify 出现的原因

Rsync(remote sync)远程同步工具,通过rsync可以实现对远程服务器数据的增量备份同步,但rsync自身也有瓶颈,同步数据时,rsync采用核心算法对远程服务器的目标文件进行比对,只进行差异同步。

如果服务器的文件数量达到了百万甚至千万量级,那么文件对比将是非常耗时的。而且发生变化的往往是其中很少的一部分,这是非常低效的方式。inotify的出现,可以缓解rsync不足之处,取长补短。

什么是inotify?

Inotify是一种强大的,细粒度的,异步的文件系统事件监控机制(软件),linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加,删除,修改,移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools正是实施这样监控的软件。

Inotify实际是一种事件驱动机制,它为应用程序监控文件系统事件提供了实时响应事件的机制,而无须通过诸如cron等的轮询机制来获取事件。

cron等机制不仅无法做到实时性,而且消耗大量系统资源。相比之下,inotify基于事件驱动,可以做到对事件处理的实时响应,也没有轮询造成的系统资源消耗,是非常自然的事件通知接口,也与自然世界的事件机制相符合。

由于inotify软件是Linux系统2.6内核开始支持,以前版本不支持,所以,安装前需要检查当前系统是否支持安装inotify软件。

实验环境

1. 内核:
[root@gaosh-1 ~]# uname -r
2.6.32-696.el6.x86_64

2. 查看当前系统是否支持安装inotify软件

如果出现下列三个内容,表示当前系统可以安装inotify软件

[root@gaosh-1 ~]# ls -l /proc/sys/fs/inotify/
总用量 0
-rw-r--r-- 1 root root 0 6月  29 12:14 max_queued_events
-rw-r--r-- 1 root root 0 6月  29 12:14 max_user_instances
-rw-r--r-- 1 root root 0 6月  29 12:14 max_user_watches

对这三个参数的解释:

  • max_user_watches:设置inotifywait或inotifywatch命令可以监视的文件数量(单进程);
  • max_user_instances:设置每个用户可以运行的inotifywait或inotifywatch命令的进程数;
  • max_queued_events:设置inotify实例事件(event)队列可容纳的事件数量。

安装inotify

1. 安装epel源:
[root@gaosh-1 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
2. 使用yum安装inotify
[root@gaosh-1 ~]# yum install inotify-tools -y

参数讲解

[root@gaosh-1 ~]# which inotifywait
/usr/bin/inotifywait

inotify的两个相关命令:

  • inotifywait:在被监控的文件或目录上等待特定文件系统事件(open、close、delete等)发生,执行后处于阻塞状态,适合在shell脚本中使用; 重点掌握
  • inotifywatch:收集被监视的文件系统使用度统计数据,指文件系统事件发生的次数统计

查看帮助:

[root@gaosh-1 ~]# /usr/bin/inotifywait --help
参数 作用
r 递归查询目录
q 只打印监控事件的信息 安静状态
m 始终保持事件监听状态
excluder 排除文件或者目录的时候不区分大小写
timefmt 指定时间输出的格式
d 后台运行
-e 指定监控的时间,比如删除,增加和修改
-o 输出到文件
-s 把错误放到日志中而不是标准输出
–format 指定输出格式
-t 设置超时时间

-e 指定参数事件汇总:

在这里插入图片描述

实战举例

1. -m 监听某一个目录

第一个终端:

[root@gaosh-1 ~]# mkdir iwait
[root@gaosh-1 ~]# inotifywait -m iwait/
Setting up watches.
Watches established.

第二个终端:
进行增删改查,查看第一个终端的监控情况

[root@gaosh-1 iwait]# pwd
/root/iwait

创建一个文件aaa

[root@gaosh-1 iwait]# touch aaa
[root@gaosh-1 iwait]# 

查看监控效果

[root@gaosh-1 ~]# inotifywait -m iwait/
Setting up watches.
Watches established.
iwait/ CREATE aaa
iwait/ OPEN aaa
iwait/ ATTRIB aaa
iwait/ CLOSE_WRITE,CLOSE aaa

2. 生产环境中监听创建,删除,修改事件。

A终端:

[root@gaosh-1 ~]# inotifywait -mrq --timefmt '%d%m%y %H:%M' --format '%T %w%f' -e create,close_write,delete iwait/

B终端修改内容,删除文件操作

[root@gaosh-1 iwait]# echo test > aaa
[root@gaosh-1 iwait]# 
[root@gaosh-1 iwait]# ls
aaa
[root@gaosh-1 iwait]# rm -rf aaa
[root@gaosh-1 iwait]# 
[root@gaosh-1 iwait]# touch bbb

A终端查看监控结果:

[root@gaosh-1 ~]# inotifywait -mrq --timefmt '%d%m%y %H:%M' --format '%T %w%f' -e create,close_write,delete iwait/
290620 13:51 iwait/aaa
290620 13:51 iwait/aaa
290620 13:52 iwait/bbb
290620 13:52 iwait/bbb

总结

本文主要探讨了inotify的部署及应用,下篇文章,我们将探讨inotify与rsync的结合使用。

我是高胜寒,一个在教培行业不忘初心的人,我们下篇文章再见

rsync系列文章:

【Linux】循序渐进学运维-服务篇-rysnc原理

【Linux】循序渐进学运维-服务篇-rysnc安装及使用

【Linux】循序渐进学运维-服务篇-rsync配置文件

【Linux】循序渐进学运维-服务篇-rsync实战

【Linux】循序渐进学运维-服务篇-inotify部署及应用

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!