You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PM2事件响应咨询:如何在事件触发时执行自定义脚本?

PM2事件触发时执行脚本的解决方案

嘿,这个需求其实PM2完全能实现,可能你看文档的时候没留意到事件钩子和事件总线这两块——我之前也遇到过类似需求,下面给你两种实用的解决方案:

方案1:通过Ecosystem配置文件绑定事件钩子

PM2允许你在生态系统配置文件里直接绑定特定事件的处理脚本,比如进程重启后触发通知。这种方式简单直接,适合轻量需求。

首先创建或修改你的ecosystem.config.js:

module.exports = {
  apps: [{
    name: '你的应用名称',
    script: './app.js',
    // 定义事件钩子,支持多个事件类型
    hooks: {
      // 进程重启完成后执行的脚本
      postRestart: './send-restart-notification.js',
      // 可选:进程退出时执行的脚本
      postExit: './handle-process-exit.js'
    }
  }]
};

然后编写send-restart-notification.js来实现通知逻辑(比如发邮件、Slack消息):

// send-restart-notification.js
const sendAlert = async () => {
  console.log('检测到进程重启,正在发送通知...');
  // 这里替换成你的通知逻辑,比如调用第三方API
  // 示例:发送HTTP请求到你的通知服务
  // const fetch = require('node-fetch');
  // await fetch('https://your-alert-service.com/notify', {
  //   method: 'POST',
  //   headers: { 'Content-Type': 'application/json' },
  //   body: JSON.stringify({
  //     message: `应用 ${process.env.PM2_APP_NAME} 已重启,进程ID: ${process.env.PM2_APP_PM_ID}`
  //   })
  // });
};

sendAlert().catch(err => console.error('通知发送失败:', err));

最后用PM2启动应用:pm2 start ecosystem.config.js,以后每次进程重启,PM2都会自动执行这个通知脚本。

方案2:用PM2 Event Bus实现实时事件监听

如果需要更灵活的控制(比如同时监听多个事件、做复杂的条件判断),可以用PM2的内部事件总线来订阅所有进程的状态变化。

编写一个独立的监控脚本pm2-event-monitor.js:

// pm2-event-monitor.js
const pm2 = require('pm2');

// 连接到PM2
pm2.connect(err => {
  if (err) {
    console.error('连接PM2失败:', err);
    process.exit(1);
  }

  console.log('已连接到PM2事件总线,开始监听进程事件...');
  
  // 启动事件总线监听
  pm2.launchBus((err, bus) => {
    // 监听进程重启事件
    bus.on('process:restart', data => {
      console.log(`进程 ${data.process.name} (ID: ${data.process.pm_id}) 触发了重启事件`);
      // 调用通知逻辑
      require('./send-restart-notification.js');
    });

    // 可选:监听其他事件
    // bus.on('process:exit', data => {
    //   console.log(`进程 ${data.process.name} 已退出`);
    // });
    // bus.on('process:error', data => {
    //   console.log(`进程 ${data.process.name} 发生错误:`, data.error);
    // });
  });
});

启动这个监控脚本:pm2 start pm2-event-monitor.js --name pm2-monitor,它会一直后台运行,实时捕获PM2管理的所有进程事件。

小提示

  • 确保通知脚本的依赖包已经安装(比如node-fetch),可以用npm install node-fetch --save安装。
  • 钩子脚本是同步执行的,避免在里面写太耗时的逻辑,防止阻塞PM2的进程管理。
  • 可以通过pm2 logs pm2-monitor查看监控脚本的运行日志,方便排查问题。

内容的提问来源于stack exchange,提问作者Sergei Basharov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 15:17:30