Grunt watch error - Waiting ... Fatal error: watch ENOSPC

524

Mengapa saya mendapatkan Waiting...Fatal error: watch ENOSPCketika saya menjalankan tugas arloji? Bagaimana saya mengatasi masalah ini?

kds
sumber
13
Bagi siapa pun yang melihat ini, ini tidak khusus untuk grunttetapi program apa pun yang menggunakan tidak sah di bawahnya. Ada penjelasan yang bagus di unix.stackexchange.com/questions/13751/… .
Jesse Good

Jawaban:

1359

Setelah melakukan beberapa penelitian ditemukan solusinya. Jalankan perintah di bawah ini.

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

Untuk Arch Linux, tambahkan baris ini ke /etc/sysctl.d/99-sysctl.conf:

fs.inotify.max_user_watches=524288
kds
sumber
45
Ya, sepertinya masalah saya sudah terpecahkan ... Tapi bagaimana caranya? Mengapa? Apakah Anda memiliki sumber yang menjelaskan apa yang sedang terjadi (atau sedang terjadi). Atau mungkin Anda sendiri yang melakukannya? Bagaimanapun, terima kasih ...
slacktracer
116
Sistem memiliki batasan berapa banyak file yang dapat ditonton oleh pengguna. Anda dapat kehabisan jam tangan dengan cukup cepat jika Grunt dijalankan dengan program lain seperti Dropbox. Perintah ini meningkatkan jumlah maksimum jam tangan yang dapat dimiliki pengguna.
Benjamin Manns
62
Untuk Arch Linux menambahkan fs.inotify.max_user_watches=524288untuk /etc/sysctl.d/99-sysctl.confkemudian mengeksekusi sysctl --system. Ini juga akan bertahan di seluruh reboot. Untuk detail lebih lanjut: wiki.archlinux.org/index.php/Sysctl
tnajdek
38
npm dedupemembersihkannya untukku. masalah
reergymerej
25
penjelasan: echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf menulis di akhir file /etc/sysctl.conf baris "fs.inotify.max_user_watches = 524288" sudo sysctl -p mengkonfigurasi ulang kernel saat runtime, memuat file /etc/sysctl.conf sebagai parameter
kds
186

Setiap kali Anda perlu berlari sudo something ...untuk memperbaiki sesuatu, Anda harus berhenti sejenak untuk memikirkan apa yang sedang terjadi. Meskipun jawaban yang diterima di sini benar-benar valid, jawabannya adalah mengobati gejala daripada masalahnya. Mengurutkan setara dengan membeli kantong pelana yang lebih besar untuk menyelesaikan masalah: kesalahan, tidak dapat memuat lebih banyak sampah ke kuda poni. Pony sudah memiliki begitu banyak sampah, sehingga pony pingsan karena kelelahan.

Alternatif (mungkin sebanding dengan membuang kelebihan sampah kuda dan menempatkannya di tempat sampah), adalah menjalankan:

npm dedupe

Kemudian ucapkan selamat kepada diri sendiri karena membuat kuda poni bahagia.

granat
sumber
42
Terima kasih telah membuat kuda poni senang.
Christian
2
Apa tepatnya itu? Itu memecahkan masalah saya pasti. Terima kasih @grenade
Arjun KR
4
Perintah 'npm dedupe' berjalan melalui modul tree npm Anda dan memindahkan setiap paket di pohon sebanyak mungkin. Hasilnya adalah pohon yang rata. Itu bergerak paket bahkan ketika itu tidak digandakan. Anda dapat membaca lebih lanjut tentang apa yang terjadi pada berbagai versi modul dalam kasus ini, di docs.npmjs.com/cli/dedupe
Arun Reddy
1
itu tidak membantu, saya mencoba sudodan sekarang bekerja untuk saya.
asedsami
6
Dalam kasus saya, sepertinya masalah saya adalah menginstal Dropbox yang tampaknya menggunakan banyak jam tangan. Jadi saya harus menggunakan: fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -pseperti pada jawaban yang diterima, tetapi +1 untuk mengajari sayanpm dedupe
Johann Echavarria
36

Setelah mencoba jawaban granat, Anda dapat menggunakan perbaikan sementara:

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

Ini melakukan hal yang sama dengan jawaban kds , tetapi tanpa menahan perubahan. Ini berguna jika kesalahan hanya terjadi setelah beberapa waktu uptime dari sistem Anda.

Arne L.
sumber
3
Ini harus menjadi jawaban yang diterima karena masalah secara alami disebabkan oleh apa yang sedang berjalan saat ini dan bukan oleh konfigurasi yang buruk (lihat contoh "kuda").
arielnmz
7

Untuk mencari tahu siapa yang membuat instance tidak masuk akal , coba perintah ini ( sumber ):

for foo in /proc/*/fd/*; do readlink -f $foo; done | grep inotify | sort | uniq -c | sort -nr

Milik saya terlihat seperti ini:

 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

Dengan menggunakan ps -p 2857, saya dapat mengidentifikasi proses 2857 sebagai sublime_text. Hanya setelah menutup semua jendela sublim, saya dapat menjalankan skrip simpul saya.

Michael Lewis
sumber
sama dengan saya untuk vscode tetapi saya pikir ini terkait dengan jam tangan file juga
pcnate
3

Saya mengalami kesalahan ini setelah PC klien saya mogok, jest --watchperintah yang saya jalankan di server tetap ada, dan saya mencoba menjalankannya jest --watchlagi.

Penambahan yang /etc/sysctl.confdijelaskan dalam jawaban di atas mengatasi masalah ini, tetapi juga penting untuk menemukan proses lama saya melalui ps aux | grep nodedan killitu.

Harun
sumber
0

Dalam kasus saya ini terkait dengan vs-code yang berjalan di mesin Linux saya. Saya mengabaikan peringatan yang muncul tentang pengamat file bla bla. Solusinya ada pada halaman vs-code docs untuk linux https://code.visualstudio.com/docs/setup/linux#_visual-studio-code-is-unable-to-watch-for-file-changes-in- ini-large-workspace-error-enospc

Solusinya hampir sama (jika tidak sama) dengan jawaban yang diterima, hanya memiliki lebih banyak penjelasan bagi siapa saja yang datang ke sini setelah mengalami masalah dari vs-code.

azeez
sumber
0

Dalam kasus saya, saya menemukan bahwa saya memiliki plugin yang agresif untuk Vim, baru saja me-restart itu.

Vitaly Zdanevich
sumber