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

如何让使用PM2的Discord.js v14.9.0机器人彻底停止运行?

问题描述

我正在为使用PM2维持运行的Discord Bot制作一个终止开关,但执行命令后PM2会自动重启机器人。执行pm2 list后可见进程处于被自动重启的状态,请问如何彻底终止进程,直到手动重启它?

当前使用的代码

命令文件代码

const { exec } = require("child_process");
let path = require("path");
let batch = path.resolve("TerminateProcess.bat");
await exec(batch, (error, stdout, stderr) => {
  if (error !== null) {
    console.log(`exec error: ${error}`);
  }
});

TerminateProcess.bat 文件内容

pm2 stop index.js 

解决方案

PM2自动重启是因为进程可能开启了自动重启策略(比如--watch监听文件变化,或是PM2默认的异常重启机制),pm2 stop仅会暂停进程,无法彻底移除PM2对它的管理,触发重启条件后仍会重启。要彻底终止并防止自动重启,可按以下方式操作:

  • 用pm2 delete替代pm2 stop
    pm2 delete会将进程完全从PM2的管理列表中移除,彻底终止运行,后续只有手动执行pm2 start index.js才会重启。修改你的TerminateProcess.bat内容:

    pm2 delete index.js
    
  • 检查并关闭自动重启配置
    如果启动Bot时使用了--watch参数,PM2会监听文件变化自动重启进程。可通过pm2 show index.js查看进程配置,若watch字段为true,后续启动时去掉--watch参数,或修改PM2的生态配置文件(如ecosystem.config.js)关闭自动重启规则。

  • 直接在Node.js代码中执行命令(可选)
    可以省略bat文件,直接在命令代码中执行pm2 delete:

    const { exec } = require("child_process");
    
    await exec("pm2 delete index.js", (error, stdout, stderr) => {
      if (error !== null) {
        console.log(`exec error: ${error}`);
      } else {
        console.log("进程已彻底终止");
      }
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:00:06