Cách khởi động lại máy chủ node.js


81

Tôi đã cài đặt và đang chạy một máy chủ node.js trên osx. Tôi đã sử dụng một mô-đun trò chuyện và rất vui khi chạy nó. Tôi đã thay đổi một số phần và cần khởi động lại máy chủ để xem các hiệu ứng.

Tôi chỉ biết cách khởi động lại bằng cách đóng cửa sổ đầu cuối rồi mở lại và sau đó chạy lại nút chatdemo.js.

Có cách nào để khởi động lại mà không đóng thiết bị đầu cuối không?

Cảm ơn.


1
Sử dụng mãi mãi github.com/foreverjs/forever . Sau đó, tất cả các bạn phải loại làforever restart
basickarl

Câu trả lời:


102

Nếu nó chỉ đang chạy (không phải daemon) thì chỉ cần sử dụng Ctrl-C.

Nếu nó bị mờ thì bạn có thể thử:

$ ps aux | grep node
you   PID  1.5  0.2  44172  8260 pts/2    S    15:25   0:00 node app.js
$ kill -2 PID

Ở đâu PIDđược thay thế bằng số trong đầu ra của ps.


9
Bạn cũng có thể sử dụng "killall -2 node", có tác dụng tương tự.
user123444555621

2
Không muốn / cần phải giết tất cả các tiến trình nút. Nếu tôi có tôi mở một số nút repl của tôi sẽ là một người cắm trại không hài lòng sau khi dòng đó :)
rfunduk

7
lưu ý phụ: bắt đầu một daemon nút bởinohup node server.js &
Drew Lesueur

52

Trong quá trình phát triển, cách tốt nhất để khởi động lại máy chủ để xem các thay đổi được thực hiện là sử dụng gật đầu

npm cài đặt gật đầu -g

gật đầu [tên ứng dụng của bạn]

gật đầu sẽ xem các tệp trong thư mục mà nút đã được khởi động và nếu chúng thay đổi, nó sẽ tự động khởi động lại ứng dụng nút của bạn.

Kiểm tra repo git của gật gù : https://github.com/remy/nodemon


Tôi không biết về mô-đun này, nó là một cái gì đó rất hữu ích, nhắc tôi ứng dụng django của tôi. cảm ơn.
Hola đậu nành Edu Feliz Navidad

Đề xuất tuyệt vời. Rất hiệu quả để phát triển để kiểm tra mã một cách nhanh chóng.
mbokil

ok cảm ơn, làm thế nào chúng ta có thể cấu hình nhật thực để sử dụng nút thay vì nút ..?
Alexander Mills

16

Trong trường hợp này, bạn thường xuyên khởi động lại máy chủ node.js của mình vì nó đang trong quá trình phát triển tích cực và bạn luôn thực hiện các thay đổi. Có một tập lệnh tải lại nóng tuyệt vời sẽ xử lý điều này cho bạn bằng cách xem tất cả các tệp .js của bạn và khởi động lại máy chủ node.js của bạn nếu bất kỳ tệp nào trong số đó đã thay đổi. Chỉ là tấm vé cho sự phát triển và thử nghiệm nhanh chóng.

Kịch bản và giải thích về cách sử dụng nó ở đây tại Draco Blue .


5
FYI hiện có một số mô-đun nút dành riêng cho điều đó, hãy xem trang Wiki mô-đun Node .
Marco

14

Tôi đã gặp vấn đề tương tự và sau đó đã viết tập lệnh shell này để giết tất cả các quy trình nút hiện có:

#!/bin/bash
echo "The following node processes were found:"
ps aux | grep " node " | grep -v grep
nodepids=$(ps aux | grep " node " | grep -v grep | cut -c10-15)

echo "OK, so we will stop these process/es now..."

for nodepid in ${nodepids[@]}
do
echo "Stopping PID :"$nodepid
kill -9 $nodepid
done
echo "Done"

Sau khi tệp này được lưu dưới dạng tệp shell script (xxx.sh), bạn có thể muốn thêm nó vào PATH của mình như được mô tả ở đây .

(Xin lưu ý rằng điều này sẽ giết tất cả các quy trình có "nút" trong tên của nó ngoại trừ tên riêng của grep, vì vậy tôi đoán trong một số trường hợp, nó cũng có thể giết một số quy trình khác có tên tương tự)


2
Tôi đang trên mac osx tôi đã phải sử dụngcut -c17-20
ThomasReggi

1
Đây không phải là chính xác những gì pkill nodedành cho?
tandrewnichols

6

Nói "gật đầu" sẽ trả lời câu hỏi.

Nhưng về cách chỉ tiêu diệt (tất cả) (các) con quỷ nút, những điều sau đây phù hợp với tôi:

pkill -HUP node

5

Tôi hiểu rằng nhận xét của tôi liên quan đến cửa sổ, nhưng có thể ai đó hữu ích. Để giành chiến thắng trong cmd:

wmic process  where "commandline like '%my_app.js%' AND name='node.exe' " CALL Terminate

thì bạn có thể chạy lại ứng dụng của mình:

node my_app.js

Ngoài ra, bạn có thể sử dụng nó trong tệp hàng loạt, với dấu ngoặc kép:

wmic process  where "commandline like '%%my_app.js%%' AND name='node.exe' " CALL Terminate
node my_app.js

Rất tiện dụng! Ý tưởng tuyệt vời.
Radmation

2

Tôi sử dụng "kill -9 [PID]" hoặc "killall -9 node" trong đó "kill -2 [PID]" không hoạt động.


2

Nếu tôi chỉ chạy ứng dụng nút từ bảng điều khiển (không sử dụng mãi mãi, v.v.) Tôi sử dụng control + C, không chắc OSX có tổ hợp phím tương tự để kết thúc hay không nhưng nhanh hơn nhiều so với việc tìm id tiến trình và giết nó, bạn cũng có thể thêm sau mã vào ứng dụng trò chuyện bạn đang sử dụng, sau đó nhập 'exit' trong bảng điều khiển bất cứ khi nào bạn muốn đóng ứng dụng.

process.stdin.resume();
process.stdin.setEncoding('utf8');

process.stdin.on('data', function(data) {
  if (data == 'exit\n') process.exit();
});

1

Lúc đầu, hãy mở terminal / dòng lệnh, sau đó vào thư mục dự án của bạn, bây giờ hãy cài đặt gật đầu bằng cách sử dụng lệnh npm install gật đầu --save-dev lệnh này sẽ đảm bảo nó được lưu dưới dạng phụ thuộc của nhà phát triển. Nếu bạn đang làm việc với expressjs thì trong tệp gói của bạn, nó sẽ giống như

{
  "name": "expressjs-app",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "cookie-parser": "~1.4.4",
    "debug": "~2.6.9",
    "express": "~4.16.1",
    "http-errors": "~1.6.3",
    "morgan": "~1.9.1",
    "pug": "^2.0.4"
  },
  "devDependencies": {
    "nodemon": "^2.0.3"
  }
}

bây giờ hãy sửa đổi giá trị "start" trong tệp package.json của bạn, đối với sản xuất, chúng tôi sẽ sử dụng giá trị thoát nhưng đối với phát triển sẽ sử dụng gật đầu để theo dõi các thay đổi trong tệp nguồn mà không cần khởi động lại máy chủ. Ở đó giá trị mới cho bắt đầu là "start": "if [[$ NODE_ENV == 'production']]; then node ./bin/www; else gật đầu ./bin/www; fi"

tệp package.json cuối cùng sẽ trông như thế nào

{
  "name": "expressjs-app",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "if [[$NODE_ENV=='production']]; then node ./bin/www; else nodemon ./bin/www; fi"
  },
  "dependencies": {
    "cookie-parser": "~1.4.4",
    "debug": "~2.6.9",
    "express": "~4.16.1",
    "http-errors": "~1.6.3",
    "morgan": "~1.9.1",
    "pug": "^2.0.4"
  },
  "devDependencies": {
    "nodemon": "^2.0.3"
  }
}

để gỡ cài đặt gật gù jusy chỉ cần chạy lệnh npm gỡ cài đặt nút bấm

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.