在 Debian(以及其它 Linux 发行版)上,inotify 失效通常不是“bug”,而是资源限制、使用方式或内核/文件系统特性导致的。下面按最常见原因 → 排查方法 → 解决办法来说明。
inotify 对每个“被监控的对象(文件/目录)”都占用一个 watch。
系统有全局上限,默认通常较小:
cat /proc/sys/fs/inotify/max_user_watches
常见默认值:
如果你监控了大量目录(如 node_modules、大型项目),很容易耗尽。
表现:
ENOSPC: System limit for number of file watchers reached✅ 解决:
sudo sysctl -w fs.inotify.max_user_watches=524288
持久化:
echo 'fs.inotify.max_user_watches=524288' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
inotify 只在本地 Linux 文件系统有效。
以下情况会“看起来失效”:
✅ 解决:
很多程序(如编辑器、构建工具)是:
原文件 → 删除/重命名 → 新文件
inotify 监控的是 inode,文件被替换后:
✅ 解决:
IN_MOVED_TO / IN_CREATE 事件inotify 是 事件队列:
IN_IGNORED常见于:
✅ 解决:
read() inotify fd在:
可能继承宿主机的 inotify 限制。
✅ 解决:
max_user_watchesfind /proc/*/fd -type l 2>/dev/null | grep inotify
ls -l /proc/<pid>/fd | grep inotify
inotifywait -m /tmp/test
dnotifyunattended-upgrades 或大量服务时,watch 数增长快| 场景 | 是否支持 inotify |
|---|---|
| 本地 ext4 / xfs | ✅ |
| NFS | ❌ |
| Docker 容器内 | ⚠️(看挂载) |
| 编辑器保存文件 | ⚠️(替换文件) |
| 大项目前端构建 | ❌(watch 不够) |
如果你能告诉我:
我可以给你更精确的解决方案。