我已经在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
将 ps
命令输出中的数字替换掉 PID
。
nohup node server.js &
启动一个节点守护进程。 - Drew LeSueur在开发过程中,重启服务器以查看所做更改的最佳方式是使用nodemon
npm install nodemon -g
nodemon [你的应用程序名称]
nodemon将监视启动nodemon的目录中的文件,如果它们发生变化,它将自动重新启动您的Node应用程序。
查看nodemon git存储库:https://github.com/remy/nodemon
我曾经遇到同样的问题,然后写了这个 shell 脚本来终止所有已存在的 node 进程:
#!/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自己的进程,因此在某些情况下它可能会导致终止一些其他具有类似名称的进程。
cut -c17-20
。 - ThomasReggipkill node
的用途吗? - tandrewnichols在这种情况下,您经常重启node.js服务器,因为它处于活跃的开发状态,而且您一直在进行更改。有一个很棒的热加载脚本,可以通过监视所有.js文件并在这些文件中有任何更改时重新启动您的node.js服务器。非常适合快速开发和测试。
如何使用此脚本以及说明在此Draco Blue.
如果你想要回答这个问题,可以说“nodemon”。
但是如果你只想杀死所有的Node守护进程,以下方法适用于我:
pkill -HUP node
我明白我的评论与Windows有关,但可能对某些人有用。 对于Windows操作系统, 可以在命令提示符中运行以下命令:
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
如果我只是从控制台运行节点应用程序(而不使用forever等),我会使用control + C,不确定OSX是否有相同的组合键来终止,但比查找进程ID并杀死它要快得多,您还可以将以下代码添加到您正在使用的聊天应用程序中,然后在控制台中输入“exit”以关闭应用程序。
process.stdin.resume();
process.stdin.setEncoding('utf8');
process.stdin.on('data', function(data) {
if (data == 'exit\n') process.exit();
});
对于我来说,使用"kill -9 [PID]"或"killall -9 node"起作用了,而"kill -2 [PID]"却没有起作用。
kill -9
。它不允许进程干净地结束,会留下孤立的描述符,并且通常不需要。普通的 kill
就足够了,如果不行,kill -INT
就可以了。除非真的需要,否则不要使用 kill -9
,而大多数情况下不需要。 - ThoriumBR{
"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,只需运行命令 npm uninstall nodemon
forever restart
即可。 - basickarl