AWS Elastic Beanstalk(节点环境)中的 pm2 重启循环

Posted

技术标签:

【中文标题】AWS Elastic Beanstalk(节点环境)中的 pm2 重启循环【英文标题】:pm2 restart loop in AWS Elastic Beansalk (Node environment) 【发布时间】:2020-10-29 10:58:22 【问题描述】:

我有一个在 AWS Elastic Beanstalk 中构建的 NodeJs 环境。我正在使用 pm2 监控上传到环境的 2 个不同的 NodeJS 应用程序。关键是我需要确保local 应用程序在gateway 应用程序启动之前启动。我正在使用npm-run-all 同步以特定顺序启动应用程序。

这是我的 package.json:

"start": "npm-run-all -s start:local start:gateway",
"start:local": "pm2 start ./ecosystem.config.js --only local-service --env production",
"start:gateway": "pm2 start ./ecosystem.config.js --only gateway-service --env production",

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

module.exports =

  apps:
    [
      
        name: 'local-service',
        script: './dist/services/local.js',
        watch: false,
        interpreter: 'node',
        interpreter_args: '--require ts-node/register --require tsconfig-paths/register',
        autorestart: false
      ,
      
        name: 'gateway-service',
        script: './dist/server.js',
        watch: false,
        interpreter: 'node',
        interpreter_args: '--require ts-node/register --require tsconfig-paths/register',
        wait_ready: true,
        listen_timeout: 5000,
        autorestart: false
      
    ]
;

elastic beanstalk 日志显示 package.json 中的start 不断被调用。我已将每个应用程序配置为不重启,但似乎还有其他原因导致持续重启发生。我在尝试访问网关服务本身时收到 502 Bad Gateway 错误。

【问题讨论】:

你能提供一个演示吗? 【参考方案1】:

请尝试仅使用没有npm-run-all 的pm2 生态系统,即仅使用pm2 start ecosystem.config.js 并允许任何(重新)启动序列,因为在现实生活中您的gatewaylocal 应用程序可以以不同的顺序重新启动。

因此,不要使用启动调度逻辑 - 请考虑将该逻辑移至您的 local 应用程序 - 使用 gateway 应用程序监控和重新连接连接失败。

如果您仍想使用启动调度逻辑,请查看pm2 process actions 并添加到gateway 应用代码以触发启动您的local 应用。

【讨论】:

以上是关于AWS Elastic Beanstalk(节点环境)中的 pm2 重启循环的主要内容,如果未能解决你的问题,请参考以下文章

带有 ALB 的 AWS Elastic Beanstalk:节点 Websocket 超时

AWS Elastic Beanstalk(节点环境)中的 pm2 重启循环

AWS Elastic Beanstalk:如何更改节点命令?在最近的更新中删除了容器选项?

在 aws elastic beanstalk 中启动节点 pm2 进程管理器的问题,npm 更新检查失败

AWS EC2 / Elastic Beanstalk |如何按域列入白名单?

AWS Elastic Beanstalk - 如何使用 npm 和 webpack 构建捆绑 JS