无法在 nodeJS 中获取 pm2 退出或停止事件

Posted

技术标签:

【中文标题】无法在 nodeJS 中获取 pm2 退出或停止事件【英文标题】:can't get pm2 exit or stop event in nodeJS 【发布时间】:2019-08-27 13:32:52 【问题描述】:
    我正在使用 pm2 在 nodeJS 中保持服务器启动 代码上传到服务器并运行命令pm2 start app.js --name appName 但在某些情况下,当代码或其他内容出错时,pm2 会停止或杀死所有进程 当时我想发送 pm2 进程停止或杀死的邮件

    我在 app.js 中使用 pm2.connect,但每当 pm2 停止或终止时都无法获取事件,这是代码

    var pm2 = require('pm2');
    
    pm2.connect(function() 
       pm2.launchBus(function(err, bus) 
          bus.on('process:event', function(data) 
             console.log('IN APP ===>', data.event);
             Logger.info("IN APP ====> ", data.event);
             if (data.event === "exit") 
                console.log('IN APP exit', data.event);
                Logger.info("IN APP exit ====> ", data.event);
             
        );
      );
    );
    

使用此代码,当 pm2 停止或终止时,我无法获得任何事件

【问题讨论】:

我遇到了同样的问题 【参考方案1】:

您可以监听节点进程事件,并注册回调函数,请查看以下代码。

**Ps:你必须在回调函数中运行process.exit();才能关闭应用程序**

您可以拨打process.exit(); 代替发送邮件回电

function cb () 
    // Do stuff 
    // Send email 

     process.exit();

 

 //do something when app is closing
 process.on('exit', cb );

  //catches ctrl+c event
  process.on('SIGINT', cb );

   // catches "kill pid" (for example: nodemon restart)
   process.on('SIGUSR1', cb );
   process.on('SIGUSR2', cb );

   process
       .on('uncaughtException', err => 
         console.error(err, 'Uncaught Exception thrown');
          process.exit(1);
         );

【讨论】:

以上是关于无法在 nodeJS 中获取 pm2 退出或停止事件的主要内容,如果未能解决你的问题,请参考以下文章

nodejs之pm2自动重启服务

npm 无法在 Windows 10 中安装 pm2 或 nodemon

PM2 部署 nodejs API项目

解决node+express在linux上关闭服务器服务就停止的问题(非PM2)

pm2日志记录和日志分割

nodejs 守护进程运行