簡體   English   中英

如何重新啟動 node.js 服務器

[英]How to restart a node.js server

我已經在 osx 上安裝並運行 node.js 服務器。 我已經開發了一個聊天模塊並且很高興地運行它。 我已經更改了一些部分,需要重新啟動服務器才能看到效果。

我只知道如何通過關閉終端窗口然后重新打開它然后再次運行 node chatdemo.js 來重新啟動。

有什么方法可以在不關閉終端的情況下重新啟動?

謝謝。

如果它只是在運行(不是守護進程),那么只需使用Ctrl-C

如果它是守護進程,那么你可以嘗試:

$ 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

其中PIDps輸出中的數字替換。

在開發過程中,重啟服務器以查看所做更改的最佳方法是使用nodemon

npm install nodemon -g

nodemon [您的應用程序名稱]

nodemon 將監視 nodemon 啟動目錄中的文件,如果它們發生變化,它將自動重新啟動您的 node 應用程序。

檢查nodemon git repo: https : //github.com/remy/nodemon

在這種情況下,您經常重新啟動 node.js 服務器,因為它正在積極開發中,並且您一直在進行更改。 有一個很棒的熱重載腳本,它會通過觀察所有 .js 文件並在其中任何文件發生更改時重新啟動 node.js 服務器來為您處理此問題。 只是快速開發和測試的門票。

有關如何使用它的腳本和說明位於Draco Blue此處。

我遇到了同樣的問題,然后編寫了這個 shell 腳本,它殺死了所有現有的節點進程:

#!/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"

在此之后被保存為一個shell腳本(xxx.sh)文件你可能想描述將它添加到您的PATH 這里

(請注意,這將殺死所有名稱中帶有“ node ”的進程,除了 grep 自己的進程,所以我想在某些情況下它也可能會殺死一些具有類似名稱的其他進程)

說“nodemon”會回答這個問題。

但是關於如何只殺死(所有)節點惡魔,以下對我有用:

pkill -HUP node

我知道我的評論與 Windows 相關,但可能有人有用。 對於在 cmd 中運行的 win:

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

然后你可以再次運行你的應用程序:

node my_app.js

您也可以在批處理文件中使用它,並帶有轉義引號:

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

在“kill -2 [PID]”不起作用的情況下,使用“kill -9 [PID]”或“killall -9 node”對我有用。

如果我只是從控制台運行節點應用程序(不使用永遠等),我使用 control + C,不確定 OSX 是否具有相同的組合鍵來終止但比找到進程 ID 並殺死它快得多,您還可以添加將以下代碼添加到您正在使用的聊天應用程序中,然后在您想關閉應用程序時在控制台中鍵入“退出”。

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

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

在第一次打開終端/命令行,然后去你的項目目錄,現在通過使用命令NPM安裝nodemon --save-dev的這個命令將確保它保存為開發者依賴安裝nodemon。 如果你正在使用expressjs那么在你的包文件中它看起來像

{
  "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"
  }
}

現在修改 package.json 文件中的“start”值,對於生產,我們將使用現有值,但對於開發,將使用 nodemon 來跟蹤源文件中的更改,而無需重新啟動服務器。 start 的新值是"start": "if [[$NODE_ENV=='production']]; then node ./bin/www; else nodemon ./bin/www; fi"

最終的 package.json 文件看起來像

{
  "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"
  }
}

卸載 nodemon jusy 只需運行命令npm uninstall nodemon

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM