【问题标题】:can't get pm2 exit or stop event in nodeJS无法在 nodeJS 中获取 pm2 退出或停止事件
【发布时间】:2023-11-01 21:29:01
【问题描述】:
  1. 我正在使用 pm2 在 nodeJS 中保持服务器启动
  2. 代码上传到服务器并运行命令pm2 start app.js --name appName
  3. 但在某些情况下,当代码或其他内容出错时,pm2 会停止或杀死所有进程
  4. 当时我想发送 pm2 进程停止或杀死的邮件
  5. 我在 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 停止或终止时,我无法获得任何事件

【问题讨论】:

  • 我遇到了同样的问题

标签: node.js 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);
         });

【讨论】: