node.js - PM2,以代码 0 退出(启动时重新启动)

标签 node.js docker pm2

我尝试在我的应用程序上安装 PM2,它在本地主机上运行得很好。然而,当我将应用程序移至 docker 容器并尝试在 Linux 计算机上运行时,问题出现了。

我正在运行命令 npm run production,它执行以下代码:

pm2 start Ecosystem.config.js --env production --no-autorestart

此后,在命令行上,我看到 PM2 如何启动并在所有可用内核上启动我的应用程序。

app         | [PM2] PM2 Successfully daemonized
app         | [PM2][WARN] Applications App not running, starting...
app         | [PM2] App [App] launched (2 instances)
app         | ┌─────┬───────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
app         | │ id  │ name      │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
app         | ├─────┼───────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
app         | │ 0   │ App    │ default     │ 1.0.0   │ cluster │ 36       │ 0s     │ 0    │ online    │ 0%       │ 38.0mb   │ root     │ disabled │
app         | │ 1   │ App    │ default     │ 1.0.0   │ cluster │ 43       │ 0s     │ 0    │ online    │ 0%       │ 25.0mb   │ root     │ disabled │
app         | └─────┴───────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘

然后它返回一条消息:

应用程序已退出,代码为 0

整个过程周而复始,周而复始…… 我尝试在“fork”上的“cluster_mode”上运行它,我尝试使用 --no-autorestart 运行它,但它仍然不断重新启动。

我真的不知道我做错了什么?

@@EDIT,添加了 Ecosystem.config.js


module.exports = {
  apps : [{
    name: 'App',
    script: './build/server/index.js',

    // Options reference: https://pm2.keymetrics.io/docs/usage/application-declaration/
    exec_mode: 'cluster_mode',
    args: 'none',
    instances: os.cpus().length,
    autorestart: false,
    watch: false,
    // max_memory_restart: '3G',
    env: {
      NODE_ENV:'development',

    },
    env_production: {
      NODE_ENV:'production',

    }
  }],

  deploy : {
    production : {
      user : 'szygendab',
      host : '212.83.163.1',
      ref  : 'origin/master',
      repo : '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5e39372a1e39372a362b3c703d3133" rel="noreferrer noopener nofollow">[email protected]</a>:repo.git',
      path : '/var/www/production',
      'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production'
    }
  }
};

最佳答案

更新

我找到了解决方案。基本上,docker 上的应用程序不应该从 pm2 开始运行,而应该从 pm2-runtime 开始运行。这就是它在本地主机上工作而不是在 docker 镜像内工作的原因。据我了解,docker完成了一项任务并关闭了它,此后它不断接收另一个启动任务并循环启动应用程序。

相反,pm2 start ....我已将测试实例的方法切换为 pm2-runtime start ...并且它有所帮助。

关于node.js - PM2,以代码 0 退出(启动时重新启动),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60721558/

相关文章:

java - 无法从 Dockerfile 运行可执行文件

gruntjs - 使用 PM2 启动 gruntserve

javascript - 在 Express 和 Node JS 中显示常见的 HTML

javascript - 将javascript对象写入 Node 中的文件

node.js - 如何在 mongodb 中插入嵌套对象?

laravel - 将应用程序从宅基地移至Docker

在 Ubuntu 20.04 LTS(Vmware)上安装 docker 失败

linux - 错误 : RROR] Process or Namespace not found. PM2 错误 Linux 服务器与 github 操作

node.js - 状态码 503 Service Unavailable 可能是什么原因

Javascript 单元测试全栈