pm2重新加载Ecosystem.config.js导致应用程序多次重启

时间:2018-11-23 14:30:53

标签: node.js express pm2

我在使用生态系统.config.js文件重新加载应用程序时遇到问题。首次启动该应用程序时,它可以正确启动,但是当我使用生态系统.config.js文件刷新/重新加载该应用程序时,该应用程序将重新启动几次,从而导致错误。

我的SO是Ubuntu Xenial,PM2版本是3.2.2和Node v10.13.0。该应用程序使用Express模块​​(4.16.4)中的最新版本。 如果我使用“ pm2 reload app_name”重新加载应用程序,则不会发生此问题。

生态系统.config.js内容:

module.exports = {
  apps: [{
     script: "./index.js",
     instances: "max",
     exec_mode: "cluster",
     kill_timeout: "2000",
     env: {
       NODE_ENV: "development",
     },
     env_production: {
       NODE_ENV: "production",
     }
  }]
}

我第一次跑步时:

  

$ pm2重新加载ecosystem.config.js

     

[PM2] [WARN]应用程序索引未运行,正在启动...

     

[PM2]应用[索引]已启动(2个实例)

     

node @ ubuntu:/ data / $ pm2日志

     

[TAILING]拖尾[所有]进程的最后15行(使用>-lines选项更改值)

     

/home/node/.pm2/pm2.log后15行:

     

PM2 | 2018-11-23T13:14:30:PM2日志:应用程序[index:0]从-cluster> mode-

开始      

PM2 | 2018-11-23T13:14:31:PM2日志:App [index:0]在线

     

PM2 | 2018-11-23T13:14:31:PM2日志:应用[索引:1]从-cluster> mode-

开始      

PM2 | 2018-11-23T13:14:31:PM2日志:App [索引:1]在线

当我按名称重新加载应用程序(例如:pm2 reload app_name)时,应用程序会继续运行,但是我看到一些超时会终止进程:

PM2 | 2018-11-23T14:01:02:PM2日志:pid = 11296 msg =无法终止-在100毫秒内重试 PM2 | 2018-11-23T14:01:02:PM2日志:进程pid为11289的进程在6000ms之后仍然存在,现在将其发送给SIGKILL ... PM2 | 2018-11-23T14:01:02:PM2日志:pid = 11296 msg =无法终止-在100毫秒内重试 PM2 | 2018-11-23T14:01:02:PM2日志:进程pid为11296的进程在6000ms之后仍然存在,现在将其发送给SIGKILL ... PM2 | 2018-11-23T14:01:02:PM2日志:应用名称:索引ID:_old_0断开连接 PM2 | 2018-11-23T14:01:02:PM2日志:应用[index:_old_0]通过信号[SIGKILL]以代码[0]退出 PM2 | 2018-11-23T14:01:02:PM2日志:应用名称:索引ID:_old_1断开连接 PM2 | 2018-11-23T14:01:02:PM2日志:应用[index:_old_1]通过信号[SIGKILL]以代码[0]退出 PM2 | 2018-11-23T14:01:02:PM2日志:pid = 11289 msg =进程被杀死 PM2 | 2018-11-23T14:01:02:PM2日志:pid = 11296 msg =进程被杀死

但是,即使发生超时,应用程序仍在运行。

当我执行“ pm2 reload生态系统.config.js”时,PM2多次重新启动应用程序,并且一个实例失败:

  

0 |索引|在Module.load(internal / modules / cjs / loader.js:598:32)

     

0 |索引|在tryModuleLoad(internal / modules / cjs / loader.js:537:12)

     

0 |索引|在Function.Module._load(internal / modules / cjs / loader.js:529:3)

     

0 |索引|在对象。 (/usr/lib/node_modules/pm2/lib/ProcessContainerFork.js:48:21)

     

0 |索引|错误:听EADDRINUSE ::: 3001

我认为该问题与正确终止Express模块​​的http连接有些超时有关,但是我仍在对此进行调查。

1 个答案:

答案 0 :(得分:0)

该问题已在最新的PM2版本上修复,请更新:

npm install pm2 @ latest -g pm2更新

请确保您pm2 delete all,然后再次重新启动您的应用程序,然后在重新加载或重新启动时它将正常工作