为什么PM2无法启动我的Node进程?

时间:2019-01-09 17:31:07

标签: node.js pm2 process-management

以前,我已经成功实现了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 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出了什么问题?

这是我的ecosystem.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软件包。

3 个答案:

答案 0 :(得分:2)

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

在这里共享它,以防其他任何人遇到这种情况:

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

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

答案 1 :(得分:1)

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

pm2 start --no-daemon app.js

答案 2 :(得分:0)

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

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

在生产中绝对不建议在no-daemon中运行。确保PM2作为守护程序运行,以便它本身可以重新启动,从而可以将您的进程重新启动为进程本身。如果您终止了终端会话,或者它们在主机上自动超时,那么您会很快发现服务中断。

因此,简而言之,..正确地进行操作并找出问题所在,而不是懒惰并将PM2转换为node二进制文件的光荣包装。