Ubuntu inotify设置关键注意事项
inotify的监控能力受内核参数严格限制,需重点关注以下三个参数:
max_user_watches
:单个用户可监控的文件/目录数量上限(默认约8192)。若监控大量文件(如前端项目、日志目录),需调大此值。临时修改用sudo sysctl -w fs.inotify.max_user_watches=131072
,永久修改则添加fs.inotify.max_user_watches=131072
到/etc/sysctl.conf
并执行sudo sysctl -p
。max_user_instances
:单个用户可创建的inotify实例数(默认128)。若同时运行多个监控进程(如多个脚本、工具),需调大此值(如设为10000)。max_queued_events
:单个inotify实例可排队的事件数(默认16384)。若事件产生速度过快(如高频文件写入),需调大此值以避免事件丢失。max_user_watches
设为131072,max_user_instances
设为10000)。inotify原生不支持递归监控目录树(即无法自动监控子目录下的文件变化)。若需监控整个目录树,需通过脚本或工具手动遍历子目录并添加watch(如用inotifywait -r
递归监控,或编写程序循环添加子目录watch)。需注意,递归监控会显著增加监控数量,需配合调整max_user_watches
。
-e
参数指定需监控的事件类型(如inotifywait -m -e modify,create,delete
),忽略不关心的事件(如attrib
属性变化)。asyncio
)处理inotify事件,避免阻塞主线程导致事件堆积。max_user_watches
已达上限。解决方法:调大max_user_watches
(参考1中的调整方法),并重启相关进程。/dev/loop
设备空间耗尽(常见于Snap应用)。需通过df -h /dev/loop*
检查并清理无用的Snap包(如sudo snap remove --revision=<rev> <package>
)。grep INOTIFY_USER /boot/config-$(uname -r)
查看,输出CONFIG_INOTIFY_USER=y
则表示支持。inotify_rm_watch
移除不再需要的watch,避免文件描述符泄漏(编程使用时需特别注意)。