Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。
rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样刚好解决了同步数据的实时性问题。
安装前查看内核版本以及确认内核是否支持
[root@192 ~]# uname -r
3.10.0-1160.el7.x86_64
[root@192 ~]# ll /proc/sys/fs/inotify
total 0
-rw-r--r--. 1 root root 0 May 23 12:08 max_queued_events
-rw-r--r--. 1 root root 0 May 23 12:08 max_user_instances
-rw-r--r--. 1 root root 0 May 23 12:08 max_user_watches
max_queued_events 是 Inotify 管理的队列的最大长度,文件系统变化越频繁,这个值就应该越大!如果使用时:
[root@192 ~]# inotifywait -mrq -e modify,delete,create,attrib /
Failed to watch /; upper limit on inotify watches reached!
Please increase the amount of inotify watches allowed per user via `/proc/sys/fs/inotify/max_user_watches'.
说明max_queued_events太小需要调整参数后再次使用
[root@192 ~]# echo 10000000 > /proc/sys/fs/inotify/max_user_watches
inotify-tools指令:
inotifywait 用于等待文件或文件集上的一个特定事件,它可以监控任何文件和目录
inotifywatch 用于收集被监控的文件系统统计数据,包括每个inotify事件发生多少次等信息
inotifywait:
-m ,--monitor 表示始终保持事件监听状态
-r ,--recursive 表示递归查询目录
-q 即--quiet,表示不打印监控事件(最开始的提示信息)
-e 即--event,通过此参数可以指定要监控的事件,常见的事件有modify、delete、create、attrib等
-e:
access 文件读取
modify 文件更改。
attrib 文件属性更改,如权限,时间戳等。
close_write以可写模式打开的文件被关闭,不代表此文件一定已经写入数据。
close_nowrite以只读模式打开的文件被关闭。
close 文件被关闭,不管它是如何打开的。
open 文件打开。
moved_to一个文件或目录移动到监听的目录,即使是在同一目录内移动,此事件也触发。
moved_from一个文件或目录移出监听的目录,即使是在同一目录内移动,此事件也触发。
move包括moved_to和 moved_from
move_self文件或目录被移除,之后不再监听此文件或目录。
create 文件或目录创建
delete 文件或目录删除
inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib /var/www/html/
--format '%T %w%f'将以“文件类型 完整路径/文件名”的格式输出结果。
inotifywait -mrq --timefmt "%y-%m-%d %T" --format "%T %w%f 当前事件有:%e" -e close_write,delete /var/
inotify+rsync实现实时同步:
inotifywait -mrq --timefmt "%y-%m-%d %T" --format "%T %w%f 当前事件有:%e" -e close_write,delete /var/ |
while read line
do
rsync -za --delete /var/ root@192.168.1.251:/var/
done & > /etc/null &