1.inotify简介
- 异步文件系统事件监控机制,Linux内核从2.6.13加入Inotify支持,通过Inotify可以监控文件系统中添加,删除,修改,移动等各种事件
- 实际是一种事件驱动机制,为应用程序监控文件系统事件提供了实时响应事件的机制,而无须通过诸如cron等的轮询机制来获取事件
2.安装环境准备
- rsync daemon 服务配置成功,可以从rsync客户端推送拉取数据,才配置inotify,配置rsync daemon 可参考: https://blog.csdn.net/cen50958/article/details/89302236
- linux内核要求:2.6.13及其以上
3.开始安装
- 查看当前系统是否支持inotitfy
uname -r
ls -l /proc/sys/fs/inotify/
- 查看是否安装inotify-tools
rpm -qa inotify-tools
- 安装inotify-tools
方式一:yum安装
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum install inotify-tools -y
方式二:编译安装
wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar -zvxf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure --prefix=/usr/local/inotify
make
make install
3.工具集介绍
共安装2个工具:inotifywait、inotifywatch
- inotifywait
在被监控的文件或目录上等待特定文件系统事件(open,close,delete等)发生,执行后处于阻塞状态,适合在shell脚本中使用 - inotifywatch
收集被监视的文件系统使用度统计数据,指文件系统事件发送的次数统计
4.inotifywait常用命令
查看命令帮助:
/usr/bin/inotifywait --help
常用参数:
参数 | 说明 |
---|---|
-m | 持续监听 |
-r | 使用递归形式监视目录 |
-q | 减少冗余信息,只打印出需要的信息 |
-e | 指定要监视的事件,多个时间使用逗号隔开 |
–timefmt | 时间格式 ymd分别表示年月日,H表示小时,M表示分钟 |
–format | 监听到的文件变化的信息 %w 表示发生事件的目录 %f 表示发生事件的文件 %e 表示发生的事件 %Xe 事件以“X”分隔 %T 使用由–timefmt定义的时间格式 |
Events事件:
事件 | 描述 |
---|---|
access | 文件或目录被读取 |
modify | 文件或目录被修改 |
attrib | 文件或目录属性被改变 |
close_write | 文件或目录被写入后关闭 |
close_nowrite | 文件或目录没有写入关闭 |
close | 文件或目录关闭,无论读/写模式 |
open | 文件或目录被打开 |
moved_to | 文件或目录被移动至另外一个目录 |
moved_from | 文件或目录被从另一个目录移动至当前目录 |
move | 文件或目录被移动另一个目录或从另一个目录移动至当前目录 |
create | 文件或目录被创建在当前目录 |
delete | 文件或目录被删除 |
delete_self | 文件或目录被安全删除 |
unmount | 文件系统被挂载 |
5.命令使用
监控创建,删除:
inotifywait -mrq --timefmt ‘%d%m%y %H:%M’ --format ‘%T %w%f’ -e create,delete /backup/
另外开终端创建文件:touch {1…3}.txt rm -f 1.txt
执行效果如下:
6.编写inotify实时监控脚本
mkdir /server/scripts/ -p
vim /server/scripts/inotify.sh
#监控目录
Path=/backup
#rsync服务IP
Ip=192.168.47.51
#监控backup目录
/usr/bin/inotifywait -mrq --timefmt ‘%d%m%y %H:%M’ --format ‘%T %w%f’ -e create,close_write,delete $Path
|while read file
do
if [ -f $file ];then
#只同步更改过的文件
rsync -az $file --delete rsync_backup@$Ip::backup --password-file=/etc/rsync.password
else
#同步整个目录
cd $Path
rsync -az ./ --delete rsync_backup@$Ip::backup --password-file=/etc/rsync.password
fi
done
脚本下载路径:
https://download.csdn.net/download/cen50958/11126567
7.关键参数
参数 | 说明 | 默认值 |
---|---|---|
max_queued_events | 设置inotifywait或inotifywatch命令可以监控的文件数量(单进程) | 16384 |
max_user_instances | 设置每个用户可以运行的inotifywait或inotifywatch命令的进程数 | 128 |
max_user_watches | 设置inotify实例事件(event)队列可容纳的事件数量 | 8192 |
8.inotify优缺点
- 优点:
监控文件系统事件变化,通过同步工具实现数据同步 - 缺点:
并发如果大于200个文件(10-100K),同步会有延迟
监控到事件后,调用rsync同步是单进程(加&并发)