如何重启node.js服务器


81

我已经安装并正在osx上运行一个node.js服务器。我已经释放了一个聊天模块,并且正在愉快地运行它。我更改了一些内容,需要重新启动服务器才能看到效果。

我只知道如何通过关闭终端窗口,然后重新对其进行操作,然后再次运行节点chatdemo.js来重新启动。

有什么方法可以重启而不关闭终端吗?

谢谢。


1
永远使用github.com/foreverjs/forever。然后,您只需输入forever restart
basickarl,2016年

Answers:


102

如果它仅在运行(不是守护程序),则使用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

PID由输出数代替ps


9
您也可以使用“ killall -2 node”,其效果相同。
user123444555621

2
不想/不需要杀死所有节点进程。如果我有一些节点代表打开,那行之后我将是一个不高兴的露营者:)
rfunduk 2010年

7
旁注:由nohup node server.js &
Drew LeSueur

52

在开发期间,重新启动服务器以查看所做更改的最佳方法是使用 nodemon

npm安装nodemon -g

nodemon [您的应用名称]

nodemon将监视启动nodemon的目录中的文件,如果它们发生更改,它将自动重新启动您的节点应用程序。

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


我不知道这个模块,它非常有用,让我想起了我的Django应用程序。谢谢。
Hola Soy Edu Feliz Navidad

很棒的建议。对于开发以快速测试代码非常有效。
mbokil 2014年

好的,谢谢,我们如何配置eclipse以使用nodemon而不是node ..?
亚历山大·米尔斯

16

在这种情况下,您经常会重启Node.js服务器,因为它处于开发中,并且一直在进行更改。有一个很棒的热重载脚本,它将通过查看所有.js文件并在这些文件中的任何一个已更改的情况下重新启动node.js服务器来为您解决此问题。只是快速开发和测试的门票。

有关脚本的用法和说明,请参见Draco Blue


5
仅供参考,现在有几个专用于此的节点模块,请查看Node modules Wiki页面
马可(Marco)

14

我遇到了同样的问题,然后编写了这个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本身的进程,因此我猜在某些情况下它也可能会杀死其他具有类似名称的进程)


2
我在必须使用的cut -c17-20
Mac OS X上

1
这不是真的pkill node吗?
tandrewnichols

6

说“ nodemon”会回答这个问题。

但是关于如何仅杀死(所有)节点恶魔,以下对我有用:

pkill -HUP node

5

我了解我的评论与Windows有关,但可能对您有用。对于以cmd运行的胜利:

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

非常便利!很好的主意。
Radmation

2

使用“ kill -9 [PID]”或“ killall -9节点”对我有用,而“ kill -2 [PID]”不起作用。


2

如果我只是从控制台运行节点应用程序(而不是永久使用),则使用Control + C,不确定OSX是否具有相同的键组合来终止,但比查找进程ID并杀死它快得多,您还可以添加在您正在使用的聊天应用程序中输入以下代码,然后在您要关闭该应用程序时在控制台中键入“退出”。

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

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

1

在第一次打开终端/命令行,然后去你的项目目录,现在安装nodemon使用命令NPM安装nodemon --save-dev的这个命令将确保它保存为开发人员的依赖。如果您正在使用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文件中的“开始”值,在生产中我们将使用现有值,但在开发中将使用nodemon跟踪源文件中的更改而无需重新启动服务器。start的新值是 “ start”:“ [[[$ NODE_ENV =='production']];然后是节点./bin/www;否则是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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.