inotify-tools服务详解

inotify简介

Inotify是一种异步的系统事件监控机制,Linux内核从2.6.13起,加入了Inotify支持,通过Inotify 可以监控文件系统中添加、删除,修改、移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而 inotify-tools 正是实施这样监控的软件。实际上: inotify-tools 是一个监控指定目录数据实时变化的软件程序。

Inotify程序原理是一种事件驱动机制,它为应用程序监控文件系统事件提供了实时响应事件的机制,可以做到对事件处理的实时响应。

inotify机制的优点和缺点

优点:监控文件文件系统事件变化,通过复制工具实现实时数据复制。支持多线程实时复制。

缺点:实测并发如果大于200个文件(10-100k),复制会有延迟。

inotify机制核心参数

max_user_watches: 设置inotify命令可以监视的文件数量(单进程)

max_user_instances: 设置每个用户可以运行的inotify命令的进程数

max_queued_events: 设置inotify实例事件(event)队列可容纳的事件数量

inotify-tools工具主要命令

在inotify-tools软件部署完毕后,主要应用两个命令实现数据信息的监控,一个利用inotifywait 命令实现对数据变化事件的监控,另一个利用inotifywatch命令实现对数据事件信息统计。这个两个命令是能够应用好inotify-tools 软件的关键,下面对这两个软件说明如下:
inotifywait: 在被监控的目录等待特定文件系统事件(open、close、delete等)发生,执行后处于阻塞状态,适合在 Shell 脚本中使用,此命令是实现监控的重点。

-m: 始终保持事件监听状态
-r: 递归监控目录数据信息变化
-o: 打印事件到文件中,相当于标准正确输出
-s: 发送错误到syslog相当于标准错误输出
-q: 输出信息少(只打印事件信息)
--: 排除文件或目录
--timefmt: 指定时间输出的格式
--format: 打印使用指定的输出类似格式字符串;即实际监控输出内容
-e: 指定监听指定的事件,如果省略,表示所有事件都进行监听

inotifywatch:收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计。

监控事件说明

access: 文件或目录内容被读取
modify: 文件或目录内容被写入(重要参数)
attrib: 文件或目录属性改变
close_write: 文件或目录关闭,在写入模式打开之后关闭的(重要参数)
close_nowrite: 文件或目录关闭,在只读模式打开之后关闭的
close: 文件或目录关闭,不管读或是写模式
open: 文件或目录被打开(重要)
moved_to: 文件或目录被移动到监控的目录中
moved_from: 文件或目录从监控的目录中被移动
move: 文件或目录不管移动到或是移动出监控目录都触发事件
create: 文件或目录创建在监控的目录中(重要参数)
delete: 文件或目录被删除在监控的目录中(重要参数)
delete_self: 文件或目录被删除
unmount: 文件系统包含的文件或目录不能卸载

实战案例

需求:程序自动创建的文件和目录的权限一律更改为775。

# 1. 查看是否支持inotify:
ls -l /proc/sys/fs/inotify/
总用量 0
-rw-r--r-- 1 root root 0 10月 17 21:24 max_queued_events
-rw-r--r-- 1 root root 0 10月 17 21:24 max_user_instances
-rw-r--r-- 1 root root 0 10月 17 21:24 max_user_watches
# 说明:显示这三个文件说明系统支持inotify程序功能

# 2. 安装inotify-tools:
yum install -y epel-release -y     
yum install -y inotify-tools     

# 3. 编写脚本:
cat inotifywait.sh
#!/bin/bash
WATCHED_DIR="/HanaDBBak/datatransfer/BIZ"

inotifywait -mqr -e create --format '%w%f' "$WATCHED_DIR" | while read NEW_FILE
do
    if [ -n "$NEW_FILE" ]; then
        chmod 775 "$NEW_FILE"
        chown root:sftp "$NEW_FILE"
    fi
done

# 4. 运行
nohup ./inotifywait.sh >> inotifywait.sh.log &  2>&1

# 5. 设置开机自启
tail -1 /etc/rc.d/rc.local 
/bin/sh /scripts/inotifywait.sh &>/dev/null   

优化inotify

利用inotify对应的proc目录中的三个文件,可以适当对inotify软件进行优化,企业实战中调整为如下配置:

# 单进程可以监控的文件数量
echo "50000000" > /proc/sys/fs/inotify/max_user_watches   

# 队列容纳事件的数量
echo "50000000" > /proc/sys/fs/inotify/max_queued_events 

# 说明:以上配置重启可能会失效,需要放置在rc.local文件中。
posted @ 2025-08-13 21:32  阿峰博客站  阅读(26)  评论(0)    收藏  举报