Grunt watch error - Ожидание ... Неустранимая ошибка: смотреть ENOSPC

524

Почему я получаю, Waiting...Fatal error: watch ENOSPCкогда я запускаю задачу наблюдения? Как мне решить эту проблему?

KDS
источник
13
Для тех, кто просматривает это, это не относится только к gruntлюбой программе, использующей inotify . Хорошее объяснение можно найти по адресу unix.stackexchange.com/questions/13751/… .
Джесси Гуд

Ответы:

1359

После некоторых исследований нашли решение. Запустите приведенную ниже команду.

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
KDS
источник
45
Ну, похоже, это решило мою проблему ... Но как? Почему? Есть ли у вас источники, объясняющие, что происходит (или происходило). Или ты сам можешь это сделать? Во всяком случае, спасибо ...
Slacktracer
116
Система имеет ограничение на количество файлов, которые может просматривать пользователь. Вы можете довольно быстро исчерпать часы, если у вас есть Grunt, запущенный с другими программами, такими как Dropbox. Эта команда увеличивает максимальное количество часов, которое может иметь пользователь.
Бенджамин Маннс
62
Для Arch Linux добавить fs.inotify.max_user_watches=524288к /etc/sysctl.d/99-sysctl.confи затем выполнить sysctl --system. Это также будет сохраняться при перезагрузке. Для более подробной информации: wiki.archlinux.org/index.php/Sysctl
tnajdek
38
npm dedupeпрояснил это для меня. проблема
reergymerej
25
объяснение: echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf записывает в конце файла /etc/sysctl.conf строку "fs.inotify.max_user_watches = 524288", sudo sysctl -p перенастраивает ядро ​​во время выполнения, загружая файл /etc/sysctl.conf в качестве параметра
kds
186

Каждый раз, когда вам нужно бежать, sudo something ...чтобы что-то исправить, вы должны остановиться, чтобы подумать о том, что происходит. Несмотря на то, что принятый здесь ответ является совершенно верным, он рассматривает скорее симптом, чем проблему. Сорта, эквивалентная покупке больших седельных сумок для решения проблемы: ошибка, не может загрузить больше мусора на пони. У Пони уже столько мусора, что пони теряет сознание от истощения.

Альтернативой (возможно, сравнимой с удалением лишнего мусора с пони и размещением на свалке) является запуск:

npm dedupe

Тогда иди поздравляй себя с тем, чтобы сделать пони счастливым.

граната
источник
42
Спасибо за то, что осчастливил пони.
Кристиан
2
Что именно это делает? Это точно решило мою проблему. Спасибо @ граната
Арджун КР
4
Команда 'npm dedupe' проходит по дереву вашего модуля npm и максимально перемещает каждый пакет в дереве. В результате получается плоское дерево. Он перемещает пакет, даже если он не дублируется. Вы можете узнать больше о том, что происходит с различными версиями модулей в этом случае, на docs.npmjs.com/cli/dedupe
Арун Редди
1
это не помогло, я попробовал, sudoи теперь это работает для меня.
Asedsami
6
В моем случае моя проблема, кажется, состоит в том, чтобы установить Dropbox, который, кажется, использует много часов. Таким образом, я должен был использовать: fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -pкак в принятом ответе, но +1 для учить меняnpm dedupe
Иоганн Эчаваррия
36

После попытки ответа на гранату вы можете использовать временное исправление:

sudo bash -c 'echo 524288 > /proc/sys/fs/inotify/max_user_watches'

Это делает то же самое, что и ответ kds , но без сохранения изменений. Это полезно, если ошибка возникает только после некоторого времени работы вашей системы.

Арне Л.
источник
3
Это должен быть принятый ответ, так как проблема, естественно, вызвана тем, что работает в данный момент, а не плохой конфигурацией (см. Пример «пони»).
arielnmz
7

Чтобы узнать, кто создает экземпляры 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. Только после закрытия всех возвышенных окон я смог запустить скрипт своего узла.

Майкл Льюис
источник
то же самое со мной для vscode, но я думаю, что это также относится и к просмотру файлов
pcnate
3

Я столкнулся с этой ошибкой после сбоя моего клиентского ПК, jest --watchкоманда, которую я выполнял на сервере, сохранилась, и я попытался запустить jest --watchснова.

Дополнение к /etc/sysctl.confописанному в ответах выше обошло эту проблему, но было также важно найти мой старый процесс через него ps aux | grep nodeи killего.

Аарон
источник
0

В моем случае это было связано с vs-кодом, работающим на моей машине с Linux. Я проигнорировал предупреждение, которое выскочило о наблюдателе файла бла бла. Решение находится на странице документации vs-code для linux https://code.visualstudio.com/docs/setup/linux#_visual-studio-code-is-unable-to-watch-for-file-changes-in- это-большой рабочее пространство ошибок-ENOSPC

Решение почти такое же (если не то же самое), что и принятые ответы, просто есть больше объяснений для тех, кто попадает сюда после столкновения с проблемами из vs-кода.

Azeez
источник
0

В моем случае я обнаружил, что у меня есть агрессивный плагин для Vim, просто перезапустил его.

Виталий Зданевич
источник