使用 pm2 调试 运行 的应用程序

Debug application which is run using pm2

申请是 运行

pm2 start app.js

pm2 start config.json

我想使用 node_inspector 在本地调试我的应用程序。我添加了 debug 参数

pm2 start --node-args="--debug=7000" app.js

它工作正常但如果我提供 config.json 而不是脚本 app.js 我不知道如何传递有关调试的参数。下一段配置不起作用

{
  "apps": [
    {
      "name": "myName",
      "script": "app.js",
      "args": "['--debug=7000']"
      ............
      }
    ]
}

那么如何通过 pm2 和使用配置来调试 运行 的应用程序?

你快到了,使用 node_args 而不是 args:

  • args 是您的脚本参数
  • node_args 是传递给节点可执行文件的参数

    {
      "name": "myName",
      "script": "app.js",
      "node_args": ["--debug=7000"]
    }
    

PM2 json schema

如果在此之后有人仍然对调试设置有问题,在某些情况下,您必须禁用集群模式才能使调试设置生效。

另请注意,如果将所有参数作为单个字符串传递,则 node_args 值中不需要括号。

[pm2 版本 3.2.2]

如果您想将 Vscode 与 PM2.

在 ecosystem.config.js 的生态系统文件中,在 apps.

下添加以下行

node_args : ["--inspect"]

添加它会在调用脚本时自动设置两个节点参数。他们是--inspect,--inspect-port=9232.

他们可以用console.log(process.process.execArgv)

看到

此外,如果实例数 > 1,则上述参数将继续为该 pm2 下的每个其他节点实例递增此端口号。

例如,对于第二个节点实例,pm2 将通过 --inspect--inspect-port=9233

如果您明确将检查端口设置为一个值,我会看到以下内容作为参数 --inspect,--inspect-port=9200,--inspect-port=9230

而且它似乎没有使用您想要的端口。但我认为鉴于 pm2 的性质,不使用特定端口可能更好。

希望这对您有所帮助。

另一种方法是

env: {
    NODE_OPTIONS: '--inspect'
}

在您的 ecosystem.config.js 文件中。

或在您的 pm2.yml

apps:
- script: ./server.js
  env:
    DEBUG: express:*
  node_args: "--inspect=3500"