【问题标题】:PM2, exit with code 0 (restarts on start)PM2,以代码 0 退出(启动时重新启动)
【发布时间】:2021-08-06 22:54:18
【问题描述】:

我尝试在我的应用程序上安装 PM2,它在 localhost 上运行良好。但是,当我将应用程序移动到 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         | └─────┴───────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘

然后它返回一条消息:

app exited with code 0

整个过程一次又一次地结束...... 我尝试在 'fork' 上的 'cluster_mode' 上运行它,我尝试使用 --no-autorestart 运行它,但它仍然不断重启。

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

@@EDIT,添加了生态系统.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 : 'git@github.com:repo.git',
      path : '/var/www/production',
      'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production'
    }
  }
};

【问题讨论】:

  • 日志中有什么内容吗?你能分享你的生态系统.config.js 吗?您可以编辑您的问题以包含详细信息。
  • 退出代码不是错误代码,因此启动命令可能有问题。
  • 我在问题中添加了生态系统文件

标签: node.js docker pm2


【解决方案1】:

在我的情况下,我有几个 PM2 应用程序运行良好,但转移到了一个我不熟悉的新文件结构。 npm start 总是可以正常工作,因为它指向了正确的文件。在我的情况下,正确的文件意味着那里有一行代码告诉服务器监听端口。我假设我的新文件结构和我的旧文件结构一样工作(因为我还有其他业务要运行,所以我离开了开发几年)。我告诉 PM2 在根服务器目录中启动 app.js,但 app.js 中没有调用来实际运行服务器。非常大,但是当您生疏并想开始一个新项目时,就会发生这些错误。只是为了简单起见,我在服务器根目录中使用了一个 process.json 文件并指向相应的文件。就我而言,它是这样写的:

【讨论】:

    【解决方案2】:

    更新

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

    取而代之的是 pm2 start ...。我已将测试实例的方法切换到 pm2-runtime start ... 并且它有所帮助。

    【讨论】:

      猜你喜欢
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-11
      • 2014-09-25
      • 2021-06-24
      • 2015-12-22
      相关资源
      最近更新 更多