Node.JS: Bắt lỗi: [gật đầu] Đồng hồ nội bộ không thành công: xem ENOSPC


136

Tôi chỉ cần cài đặt Node.jstrên của tôi Ubuntu 14.04hệ điều hành cho lần đầu tiên. Tôi cũng đã cài đặt npm. Bước tiếp theo trong quá trình cài đặt của tôi là cài đặt nodemon. Tất cả điều này làm việc tốt.


Nhưng, khi tôi chạy nodemonbằng cách gõ nodemon app.jsvào dòng lệnh của mình, tôi gặp lỗi sau ...

[nodemon] 1.8.1 [nodemon] to restart at any time, enter [nodemon] watching: *.* [nodemon] startingnút rs app.js [nodemon] Internal watch failed: watch ENOSPC

Trong dòng lệnh bên dưới lỗi ...

alopex@Alopex:~/Desktop/coding_dojo/week-9/javascript/node/testing_node$ Hello World

Tại sao chuyện này đang xảy ra? Đây có phải là hành vi bình thường cho nốt? Nếu không, làm thế nào tôi có thể sửa chữa nó?


Ghi chú bên ...

1) app.jslà một Javascripttập tin với console.log(111)bên trong của nó.
2) nodephiên bản là v0.10.25
3) npmphiên bản là 1.3.10
4) nodemonphiên bản là 1.8.1
5) ubuntuphiên bản là ...

Distributor ID: Ubuntu
Description:    Ubuntu 14.04.3 LTS
Release:    14.04
Codename:   trusty

Câu trả lời:


451

Dường như các cổng tối đa của tôi không được cấu hình đúng. Tôi đã chạy đoạn mã sau và nó hoạt động ...

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

Những gì lệnh này làm là tăng số lượng đồng hồ được phép cho một người dùng. Theo mặc định, số lượng có thể thấp (ví dụ 8192). Khi nodemoncố gắng xem số lượng lớn các thư mục để thay đổi, nó phải tạo ra một số đồng hồ, có thể vượt qua giới hạn đó.

Bạn cũng có thể giải quyết vấn đề này bằng cách:

sudo sysctl fs.inotify.max_user_watches=582222 && sudo sysctl -p

Nhưng cách nó được viết đầu tiên sẽ làm cho sự thay đổi này vĩnh viễn.


6
Ai đó có thể giải thích thêm một chút những gì nó làm và giải thích tại sao nó có thể giúp đỡ?
Hinrich

11
@Hinrich, đó chỉ là dự đoán, tôi nghĩ rằng nodejs xem hệ thống tệp thay đổi thông qua thư viện inotify. Tôi nghĩ rằng có giới hạn cho mỗi người dùng đối với số lượng đồng hồ tối đa, cài đặt này thay đổi thành giá trị lớn hơn.
devrimbaris

2
@devrimbaris Đúng!
Erik Åsland

3
Nó vừa xảy ra với tôi sau khi đi từ Ubuntu 14.04 đến Ubuntu 16.04. Giải pháp của bạn làm việc cho tôi là tốt. Cảm ơn bạn
Mestre San

2
/etc/sysctl.d/90-override.conf
Bật

28

Erik, Bạn chỉ có thể giết tất cả các quy trình nút khác bằng cách

nút pkill -f

và sau đó khởi động lại máy chủ của bạn một lần nữa. Nó sẽ hoạt động tốt sau đó.


7
Downvote vì điều này cũng khiến các cửa sổ Visual Studio Code của tôi bị đóng băng.
LexH

điều này đã làm việc như một bùa mê ... cho đến bây giờ! Bây giờ nó không hiệu quả, nhận được cùng một lỗi.
kestrel

28

Trên máy chủ nút đang chạy hiển thị các lỗi và giải pháp sau:

gật đầu server.js

[gật đầu] 1.17.2

[gật đầu] để khởi động lại bất cứ lúc nào, nhập rs

[gật đầu] xem : .

[gật đầu] bắt đầu node server.js

[gật đầu] Đồng hồ nội bộ không thành công: đồng hồ / nhà / aurum304 / jin ENOSPC

sudo pkill -f node

hoặc là

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

19

Theo thảo luận ở đây , ENOSPCcó nghĩa là Error No more hard-disk space available. Lý do tại sao nhiều bộ nhớ này được yêu cầu bởi nodemonhoặc gulp-nodemon(trong trường hợp của tôi) là nó đang xem nội dung của một thư mục mà nó không nên. Để sửa lỗi đó, có ignorecài đặt có thể được sử dụng để báo cho gật đầu những gì không nên xem. Có một cái nhìn vào cấu hình mẫu gật đầu ở đây .


Tốt công việc, đây là nguyên nhân gốc rễ.
lutaoact

16
[nodemon] Internal watch failed: watch /home/Document/nmmExpressServer/bin ENOSPC
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! nmmexpressserver@0.0.0 start: `nodemon ./bin/www`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the nmmexpressserver@0.0.0 start script.

Đây là lỗi tôi gặp phải khi chạy nodemon ./bin/www.

Giải pháp đã đóng một cửa sổ Atom có toàn bộ thư mục các thư mục mở trong cửa sổ dự án.

Tôi không biết tại sao, nhưng tôi giả sử rằng Atom và gật đầu sử dụng các quy trình tương tự để xem các tệp / thư mục.


2
Đó chính xác là vấn đề của tôi. Tôi rất vui khi khởi chạy nguyên tử từ thư mục cài đặt của dự án. Tôi đóng cửa nguyên tử, phóng nó từ một thư mục khác và vấn đề biến mất.
Ya.

Trong trường hợp của tôi, điều tương tự đã xảy ra trên Sublime trong Ubuntu. Khi tôi đóng IDE, tôi có thể chạy nó đúng cách. Bất cứ lời khuyên về nó?
Shad

Tôi đã không cố gắng sao chép nó để xem nó đã được sửa chưa.
codeinaire

Cảm ơn. Của tôi có thể hoạt động sau khi tôi đóng Gitkraken. Đây là một vấn đề kỳ lạ. Vậy có nghĩa là chúng ta không thể có hai quá trình theo dõi cùng một thư mục?
Zhang LongQI

Đó là ứng dụng khách Nextcloud ở đây - sử dụng rất nhiều đồng hồ inotify. Cảm ơn, mọi người!
Bill McGonigle

8

Thử cái này....

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

Sẽ thách thức làm việc


1
Tôi thích bản chất nổi loạn của sự thách thức này
SimplyKnownAsG

7

Thêm một nodemon.jsontệp cấu hình trong thư mục gốc của bạn và chỉ định các mẫu bỏ qua, ví dụ:

nodemon.json

{
  "ignore": [
    "*.test.js", 
    "dist/*"
  ]
}
  • Lưu ý rằng theo mặc định .git, node_modules, bower_components, .nyc_output, coverage.sass-cacheđược bỏ qua, do đó bạn không cần phải thêm chúng vào cấu hình của bạn.

Giải thích: Lỗi này xảy ra do bạn vượt quá số lượng người theo dõi tối đa được hệ thống của bạn cho phép (nghĩa là nodemonkhông còn dung lượng đĩa để xem tất cả các tệp - điều này có thể có nghĩa là bạn đang xem các tệp không quan trọng). Vì vậy, bạn bỏ qua các tệp không quan trọng mà bạn không quan tâm đến các thay đổi trong đó, ví dụ như đầu ra bản dựng hoặc các trường hợp thử nghiệm.


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

Điều này làm việc cho tôi


1
Vui lòng thêm một lời giải thích làm thế nào điều này trả lời câu hỏi.
Jason Aller

Hoạt động đúng
Rohit Parte

3

trong trường hợp của tôi, đóng mã studio hình ảnh sau đó khởi động máy chủ đã thực hiện thủ thuật

Hệ điều hành - Ubuntu 16,4 lts

phiên bản node.js - 8.11.1

phiên bản npm - 6.0.0


Có vẻ như anh ta đã không sử dụng phòng thu hình ảnh.
Julien Revault phó ...

1
Mặc dù điều này không trả lời trực tiếp câu hỏi (vì câu hỏi không liên quan đến Mã VS), nhưng điều này đã giải quyết vấn đề của tôi.
Cá cược Chasen

2

Thay vì chỉ định danh sách các thư mục cần bỏ qua (ví dụ: phủ định), bạn cũng có thể chỉ định danh sách các thư mục cần xem (ví dụ: tích cực):

nodemon --watch dir1 --watch dir2  dir1/examples/index.js

Trong trường hợp cụ thể của tôi, tôi có một thư mục tôi muốn xem và khoảng chín thư mục tôi muốn bỏ qua, vì vậy việc chỉ định '--watch' đơn giản hơn nhiều so với chỉ định '--ignore'


0

Tôi cũng gặp lỗi tương tự, nhưng trong Ubuntu 14.04 bên trong Windows 10 (Bash trên Ubuntu trên Windows). Tất cả những gì tôi đã làm để khắc phục lỗi là cập nhật bản cập nhật Người tạo, sau đó cho phép tôi cài đặt phiên bản 16.04 của bash Ubuntu và sau đó sau khi cài đặt phiên bản nút mới nhất (bằng các bước này ), tôi cũng đã cài đặt phiên bản mới nhất của npm và sau đó là nút. bắt đầu làm việc đúng


0

Nếu hệ điều hành là Linux thì chỉ cần sử dụng nó sẽ hoạt động.

 sudo npm run server
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.