当我运行watch任务时,为什么会出现Waiting...Fatal error: watch ENOSPC
的错误?如何解决这个问题?
进行了一些研究后找到了解决方案。运行以下命令:
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
对于Arch Linux,请将以下行添加到/etc/sysctl.d/99-sysctl.conf文件中:
fs.inotify.max_user_watches=524288
/etc/sysctl.d/99-sysctl.conf
文件中添加 fs.inotify.max_user_watches=524288
,然后执行 sysctl --system
命令。这样设置将在重启后保持不变。更多详细信息请参见:https://wiki.archlinux.org/index.php/Sysctl。 - tnajdekecho fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
将"fs.inotify.max_user_watches=524288"这行内容写入到文件"/etc/sysctl.conf"的末尾。sudo sysctl -p
重新配置内核参数,运行时加载文件"/etc/sysctl.conf"作为参数。 - kds每当你需要运行 sudo something ...
来修复问题时,你应该停下来思考发生了什么。虽然这里的被接受的答案是完全有效的,但它只是在处理症状而不是问题本身。这有点像为解决“错误,无法将更多垃圾加载到小马身上”的问题而购买更大的马鞍包一样。小马已经装了太多垃圾,以致于小马因体力不支而昏倒。
另一个选择(也许相当于将多余的垃圾从小马上卸下并放到垃圾堆里)是运行:
npm dedupe
那就去祝贺自己,因为你让小马开心了。
sudo
,现在对我来说它可以工作了。 - asedsamifs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
(正如被接受的答案所述),但是感谢教给我 npm dedupe
。 - Johann Echavarria尝试grenade的答案后,您可以使用临时解决方案:
sudo bash -c 'echo 524288 > /proc/sys/fs/inotify/max_user_watches'
这与kds的答案做的事情相同,但不会保留更改。如果错误仅在您的系统正常运行一段时间后发生,则此功能非常有用。
要查找谁在创建inotify实例,可以尝试运行以下命令(来源):
for foo in /proc/*/fd/*; do readlink -f $foo; done | grep inotify | sort | uniq -c | sort -nr
25 /proc/2857/fd/anon_inode:inotify
9 /proc/2880/fd/anon_inode:inotify
4 /proc/1375/fd/anon_inode:inotify
3 /proc/1851/fd/anon_inode:inotify
2 /proc/2611/fd/anon_inode:inotify
2 /proc/2414/fd/anon_inode:inotify
1 /proc/2992/fd/anon_inode:inotify
ps -p 2857
命令,我确定了进程号为2857的进程是sublime_text
。只有在关闭所有的sublime窗口后,我才能运行我的node脚本。在客户端PC崩溃后,我遇到了这个错误,我正在服务器上运行的jest --watch
命令持续存在,然后我尝试再次运行jest --watch
。
上面的答案中描述的对/etc/sysctl.conf
的添加解决了此问题,但是还很重要通过ps aux | grep node
找到我的旧进程并用kill
命令结束它。
grunt
,而且适用于使用 inotify 的任何程序。在 http://unix.stackexchange.com/questions/13751/kernel-inotify-watch-limit-reached 上有一个很好的解释。 - Jesse Good