如何让使用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 stoppm2 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
相关产品推荐
相关产品推荐

