inotifywait的安装及基本使用,负载均衡(一)

前言:

Inotify 一种强大的、细粒度的、异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性、读写属性、权限属性、删除创建、移动等操作,也就是可以监控文件发生的一切变化。

inotify-tools 是一个C库和一组命令行的工作,提供Linux下inotify的简单接口。inotify-tools安装后会得到inotifywait和inotifywatch这两条命令:

inotifywait命令 可以用来收集有关文件访问信息,Linux发行版一般没有包括这个命令,需要安装inotify-tools,这个命令还需要将inotify支持编译入Linux内核,好在大多数Linux发行版都在内核中启用了inotify。
inotifywatch命令 用于收集关于被监视的文件系统的统计数据,包括每个 inotify 事件发生多少次。

划重点————————————————————————————————————————————————————————————

使用场景,负载均衡,我这里是用的阿里的负载,所以需要用到unison+inotifywait实现双向同步文件

单向同步可使用:rsync+inotify 用于手工恢复的场景

安装:

开始之前需要检测系统内核是否支持inotify

  • 方式一:使用 uname -r 命令检查Linux内核,如果低于2.6.13,就需要重新编译内核加入inotify的支持。
  • 方式二:使用ll /proc/sys/fs/inotify命令,是否有以下三条信息输出,如果没有表示不支持。
1
2
3
4
5
6
7
[root@izm5eak5gr2qkq2a2z063qz ~]# uname -r
3.10.0-693.21.1.el7.x86_64
[root@izm5eak5gr2qkq2a2z063qz ~]# ll /proc/sys/fs/inotify
total 0
-rw-r--r-- 1 root root 0 May 13 10:37 max_queued_events
-rw-r--r-- 1 root root 0 May 13 10:37 max_user_instances
-rw-r--r-- 1 root root 0 May 13 10:37 max_user_watches

centos系统自带等yum安装

1
2
3
yum search inotify-tools
yum info inotify-tools
yum install inotify-tools

inotifywait 基本使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建一个名为test.log的文件
[root@izm5eak5gr2qkq2a2z063qz home]# touch test.log
# 这里 -m 参数指明持续监听,不加的话会在一个事件后退出
[root@izm5eak5gr2qkq2a2z063qz home]# inotifywait -m test.log
Setting up watches.
Watches established.
#这时候在其他shell窗口操作test.log就会打印出所进行的操作
test.log OPEN
test.log CLOSE_NOWRITE,CLOSE
test.log OPEN
test.log CLOSE_NOWRITE,CLOSE
test.log MOVE_SELF
test.log ATTRIB
test.log DELETE_SELF

常用参数说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
--timefmt 时间格式
%y年 %m月 %d日 %H小时 %M分钟
--format 输出格式
%T时间 %w路径 %f文件名 %e状态
-m 始终保持监听状态,默认触发事件即退出
-r 递归查询目录
-q 减少不必要的输出(只打印事件信息)
-e 定义监控的事件,可用参数:
open 打开文件
access 访问文件
modify 修改文件
delete 删除文件
create 新建文件
attrib 属性变更
--exclude <pattern> 指定要排除监控的文件/目录

全部参数说明,建议用man inotifywait进行查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
-h,–help
输出帮助信息
@
排除不需要监视的文件,可以是相对路径,也可以是绝对路径。
–fromfile
从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头。
-m, –monitor
接收到一个事情而不退出,无限期地执行。默认的行为是接收到一个事情后立即退出。
-d, –daemon
跟–monitor一样,除了是在后台运行,需要指定–outfile把事情输出到一个文件。也意味着使用了–syslog。
-o, –outfile
输出事情到一个文件而不是标准输出。
-s, –syslog
输出错误信息到系统日志
-r, –recursive
监视一个目录下的所有子目录。
-q, –quiet
指定一次,不会输出详细信息,指定二次,除了致命错误,不会输出任何信息。
–exclude
正则匹配需要排除的文件,大小写敏感。
–excludei
正则匹配需要排除的文件,忽略大小写。
-t , –timeout
设置超时时间,如果为0,则无限期地执行下去。
-e , –event
指定监视的事件。
-c, –csv
输出csv格式。
–timefmt
指定时间格式,用于–format选项中的%T格式。
–format
指定输出格式。
%w 表示发生事件的目录
%f 表示发生事件的文件
%e 表示发生的事件
%Xe 事件以“X”分隔
%T 使用由–timefmt定义的时间格式

可监听事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
access	访问,读取文件。

modify 修改,文件内容被修改。

attrib 属性,文件元数据被修改。

move 移动,对文件进行移动操作。

create 创建,生成新文件

open 打开,对文件进行打开操作。

close 关闭,对文件进行关闭操作。

delete 删除,文件被删除。