Commit 7e5f1ccf3a03c94b420a6e3eac1c4edcf379ff65
1 parent
5f2240d5
fix: 加 unhandledRejection/uncaughtException 兜底防 node 崩溃
症状:宜创群授权后的 hermes 回复 run 跑到一半,node 进程自己退出,
keepalive 检测到重启,打断了正在进行的 run,回复没发出。
根因推断:Node 26 默认遇未捕获的 Promise rejection 就退出进程。
流式 callHermesRunStream + sendChain Promise 链路某处漏接 reject。
修复:入口加 process.on('unhandledRejection') / ('uncaughtException')
兜底,捕获后记日志([UNHANDLED REJECTION] / [UNCAUGHT EXCEPTION])
保持进程存活,不再被 keepalive 打断。下次复现能从日志看到真正的错误栈。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Showing
1 changed file
with
10 additions
and
0 deletions
server/services/wechat/auto-reply.js
| ... | ... | @@ -1100,6 +1100,16 @@ class AutoReplyBot { |
| 1100 | 1100 | // ═══════════════════════════════════════════════════════════════ |
| 1101 | 1101 | |
| 1102 | 1102 | if (require.main === module) { |
| 1103 | + // 全局兜底:Node 默认遇 unhandledRejection / uncaughtException 会退出进程, | |
| 1104 | + // 流式 + sendChain Promise 链路某处漏接 reject 会导致 node 崩 → keepalive 重启 | |
| 1105 | + // → 打断正在跑的 hermes run。这里捕获并记日志,保持进程存活。 | |
| 1106 | + process.on('unhandledRejection', (reason) => { | |
| 1107 | + log('[UNHANDLED REJECTION]', (reason && reason.stack) || String(reason)); | |
| 1108 | + }); | |
| 1109 | + process.on('uncaughtException', (err) => { | |
| 1110 | + log('[UNCAUGHT EXCEPTION]', (err && err.stack) || String(err)); | |
| 1111 | + }); | |
| 1112 | + | |
| 1103 | 1113 | if (process.env.MY_WXID) CONFIG.myWxid = process.env.MY_WXID; |
| 1104 | 1114 | if (process.env.MY_NICKNAME) CONFIG.myNickname = process.env.MY_NICKNAME; |
| 1105 | 1115 | ... | ... |