【问题标题】:How to restart a node.js server如何重新启动 node.js 服务器
【发布时间】:2011-03-19 04:38:19
【问题描述】:

我已经在 osx 上安装并运行了一个 node.js 服务器。我已经开发了一个聊天模块,并且正在愉快地运行它。我修改了一些部分,需要重启服务器才能看到效果。

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

有什么方法可以在不关闭终端的情况下重新启动?

谢谢。

【问题讨论】:

标签: macos node.js


【解决方案1】:

如果它只是在运行(不是守护程序),那么只需使用 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 输出中的数字。

【讨论】:

  • 也可以使用killall -2 node,效果一样。
  • 不想/不需要杀死所有节点进程。如果我打开了一些节点 repl,我会在那条线之后成为一个不开心的露营者:)
  • 旁注:通过nohup node server.js &启动一个节点守护进程
【解决方案2】:

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

npm install nodemon -g

nodemon [你的应用名称]

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

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

【讨论】:

  • 我不知道这个模块,它非常有用,让我想起了我的 django 应用程序。谢谢。
  • 很棒的建议。对开发人员快速测试代码非常有效。
  • 好的,谢谢,我们如何配置 eclipse 以使用 nodemon 而不是 node..?
【解决方案3】:

在这种情况下,您经常重新启动您的 node.js 服务器,因为它正在积极开发中并且您一直在进行更改。有一个很棒的 hot reload 脚本,它会通过查看所有 .js 文件并在其中任何文件发生更改时重新启动 node.js 服务器来为您处理这个问题。只是快速开发和测试的门票。

关于如何使用它的脚本和说明在这里Draco Blue

【讨论】:

【解决方案4】:

我遇到了同样的问题,然后写了这个 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,如 here 所述。

(请注意,这将杀死名称中包含“node”的所有进程,除了 grep 自己的进程,所以我猜在某些情况下它可能还会杀死一些其他名称相似的进程)

【讨论】:

  • 我在 mac osx 上我不得不使用 cut -c17-20
  • 这不正是pkill node 的用途吗?
【解决方案5】:

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

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

pkill -HUP node

【讨论】:

    【解决方案6】:

    我了解我的评论与 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
    

    【讨论】:

    • 非常方便!好主意。
    【解决方案7】:

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

    【讨论】:

    • 不,不要去kill -9。它不会让进程干净地完成,会使描述符成为孤立的,通常不需要。香草kill 就足够了,如果没有,kill -INT 就足够了。除非真的需要,否则不要去kill -9,而且大多数时候不需要。
    【解决方案8】:

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

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

    【讨论】:

      【解决方案9】:

      首先打开终端/命令行然后转到您的项目目录,现在使用命令 npm install 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

      【讨论】:

        猜你喜欢
        • 2011-04-21
        • 2017-12-29
        • 1970-01-01
        • 2016-07-02
        • 1970-01-01
        • 1970-01-01
        • 2015-12-30
        • 1970-01-01
        相关资源
        最近更新 更多