2010-07-21 208 views
57

我已经安装并正在osx上运行node.js服务器。我已经失去了一个聊天模块,并且很高兴地运行它。我修改了一些部分,需要重新启动服务器才能看到效果。如何重新启动node.js服务器

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

任何方式重新启动没有关闭终端?

谢谢。

+0

使用永远https://github.com/foreverjs/forever。然后你只需输入'forever restart' – 2016-10-25 13:27:40

回答

71

如果它只是运行(不是守护进程),那么只需使用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输出数代替。

+6

你也可以使用“killall -2 node”,它具有相同的效果。 – user123444555621 2010-07-22 17:09:06

+2

不想/需要杀死_all_节点进程。如果我有一些节点repl的打开,我会成为一个不幸的露营者之后:) – rfunduk 2010-07-23 20:43:11

+7

备注:通过'nohup node server.js&' – 2010-10-30 18:28:46

16

在这种情况下,您经常会重新启动node.js服务器,因为它处于活动状态,并且您一直在进行更改。有一个伟大的热加载脚本,将通过观看所有的.js文件并重新启动你的node.js服务器,如果这些文件中的任何一个已经改变,将为你处理。只是快速开发和测试的门票。

关于如何使用它的脚本和解释在Draco Blue

+5

开始一个节点守护进程FYI现在有几个节点模块专门用于这一点,看看[Node modules Wiki page](https://github.com/joyent/node/wiki/modules#wiki-build-and-deployment)。 – Marco 2011-10-12 20:32:11

11

我有同样的问题,然后写这个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)这个文件后,你可能要添加它会按照here所述的PATH进行。

(请注意,这将杀死所有与它的名字“节点”的过程中,除了grep的自己,所以我想在某些情况下,它也可以杀死具有类似名称的一些其他工艺)

+2

我在mac osx上我不得不使用'cut -c17-20' – ThomasReggi 2012-07-19 03:44:21

+0

这不正是pkill节点的用途吗? – tandrewnichols 2015-01-04 20:08:48

38

在开发过程中重新启动服务器,看到所做的更改的最佳方法是使用nodemon

NPM安装nodemon -g

nodemon [你的应用程序名称]

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

检查nodemon混帐回购协议:https://github.com/remy/nodemon

+0

我不知道这个模块,它非常有用,让我想起我的django应用程序。谢谢。 – 2013-08-20 20:22:28

+0

意外的建议。非常有效的开发以快速测试代码。 – mbokil 2014-06-04 04:23:09

+0

好的,谢谢,我们如何配置eclipse来使用nodemon而不是node ..? – 2014-09-26 05:51:43

2

使用 “杀-9 PID]” 或 “killall -9节点” 为我工作,其中 “杀-2 [PID]” 没有工作。

2

如果我只是从控制台运行节点应用程序(不使用永远等)我使用控制+ C,不知道如果OSX有相同的组合键终止,但比找到进程ID并杀死它快得多,你也可以将下面的代码添加到您正在使用的聊天应用程序中,然后在控制台中输入'exit'以关闭应用程序。

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

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

据我所知,我的评论与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 
2

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

但对如何只杀(全部)节点恶魔(S),对我来说以下工作:

pkill -HUP node