【问题标题】:Why is PM2 not launching my Node process?为什么 PM2 没有启动我的 Node 进程?
【发布时间】:2019-06-04 13:04:33
【问题描述】:

之前我已经成功实施了 PM2,但目前还没有。

如果我手动启动我的节点应用程序确实运行得很好,但我没有做任何事情让它通过 PM2 运行,即使 PM2 似乎正在启动它.这就是我的意思:

如果我运行 pm2 start server/index.js,终端中的响应为:

$ pm2 start server/index.js
[PM2] Spawning PM2 daemon with pm2_home=c:\pm2_system\.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting D:\Program Files\nodeApps\service-management-api\server\index.js in fork_mode (1 instance)
[PM2] Done.* 

然后终端打印出一个带有 App 信息的表格。它看起来不太贴在这里,所以我会列出来:

App Name: index
id: 0
version: 1.0.0
mode: fork
pid: 8984
status: online
restart: 0
update 0s
cpu: 0% 
mem: 26.0 MB
user: ME
watching: disabled

看来节点进程应该正在运行。但是,如果我立即输入 pm2 list 它显示没有进程正在运行。如果我输入 pm2 停止索引,它会显示:

$ pm2 stop index
[PM2] Spawning PM2 daemon with pm2_home=c:\pm2_system\.pm2
[PM2] PM2 Successfully daemonized
[PM2][ERROR] Process index not found

或者,如果我尝试在命令中使用生态系统.config.js,我会得到类似的结果。以下是尝试过的命令:

pm2 reload ecosystem.config.js
pm2 start ecosystem.config.js

运行这些命令的示例结果:

$ pm2 start ecosystem.config.js
[PM2] Spawning PM2 daemon with pm2_home=c:\pm2_system\.pm2
[PM2] PM2 Successfully daemonized
[PM2][WARN] Applications sm_api not running, starting...
[PM2] App [sm_api] launched (2 instances)

然后 CLI 打印表格,显示两个实例,状态为“在线”并正在观看“启用”。然而,应用程序没有运行(从浏览器测试时)并且“pm2 show”返回:

[PM2] Spawning PM2 daemon with pm2_home=c:\pm2_system\.pm2
[PM2] PM2 Successfully daemonized
[PM2][WARN] <app name> doesn't exist

任何线索我的 pm2 出了什么问题?

这是我的生态系统.config.js 文件:

module.exports = {
  apps : [{
    name: 'sm_api',
    script: 'server/index.js',
    "log_date_format"  : "YYYY-MM-DD HH:mm Z",

    // Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
    args: 'one two',
    instances: 'max',
    error_file : "C:\\pm2_system\\.pm2\\logs\\sm-api-error",
    out_file: "C:\\pm2_system\\.pm2\\logs\\sm-api-out",
    autorestart: true,
    watch: "../",
    max_restarts: 10,
    max_memory_restart: '1G',
    env: {
      NODE_ENV: 'development'
    },
    env_production: {
      NODE_ENV: 'production'
    },
    exec_mode: 'cluster'
  }],
};

在 Windows Server 2012 环境中运行。请注意,我打算在 pm2 工作后添加 pm2-windows-service 包。

【问题讨论】:

  • 你检查 C:\\pm2_system\\.pm2\\logs\\sm-api-error 了吗?
  • @pzaenger - 是的,我看了。没有记录错误。感谢您的帮助。
  • 也许应用程序正在快速崩溃。你能稍微简化一下你的配置吗?关闭“集群”模式。关闭 "max_memory_restart" ,关闭观看。看看你是否可以只使用 pm2 运行基本的 server/index.js。由于文件观看,您可能会超过 1G 限制。
  • @mike_butak 看看有没有人在工作中使用 node.js 和 windows 有什么想法——我经常使用 pm2,但从来没有使用 Windows。
  • @pzaenger 仅供参考,这个问题已经解决。最近推出的 PM2 v 3.2.5 引入了一个导致 PM2 在 Windows 中崩溃的错误。解决方案是恢复到 3.2.4。问题在 github 上打开:github.com/Unitech/pm2/issues/4113 感谢您的意见!

标签: node.js pm2 process-management


【解决方案1】:

作为一种解决方法,我使用了以下方法:

pm2 start --no-daemon app.js

【讨论】:

  • 这当然不是一个长期的解决方案。一旦shell进程终止,pm2进程就会死掉。
【解决方案2】:

好的,我在 pm2 github 问题页面发布问题后得到了答案。

在这里分享,以防其他人发现自己处于这种情况:

https://github.com/Unitech/pm2/issues/4113

(基本上 pm2 3.2.5 在 Windows 中引入了一个导致此问题的错误。我的开发安装是 3.2.4。通过在生产中恢复到 3.2.4 解决了这个问题。简单的过程,请参阅上面链接中的说明。)

【讨论】:

    【解决方案3】:

    对于那些说要在no-daemon 模式下运行此程序的人(pm2 start --no-daemon),请注意,如果您尝试诊断使用守护程序运行时脚本的原因,则应使用此模式失败。

    几乎总是这样,这是因为您告诉 PM2 在构建时查看 dist 文件夹或类似文件夹,因此 PM2 会不断重新启动,直到达到其限制(因为文件正在以非常快的速度重新生成),然后输出“错误”状态。

    绝对不建议在生产环境中运行 no-daemon。确保 PM2 作为守护进程运行,以便它可以自行重新启动,并且它可以将您的进程作为进程本身重新启动。如果您终止终端会话或它们在您的主机上自动超时,您将很快发现您的服务在发生这种情况时终止。

    所以,简而言之.. 以正确的方式做事并找出问题所在,而不是偷懒并将 PM2 变成 node 二进制文件的美化包装器。

    【讨论】:

      猜你喜欢
      • 2021-10-14
      • 1970-01-01
      • 2017-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多