From d4478275ee7661b17f804f98aa9cfa976fea0d4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Sat, 17 Jan 2026 18:38:12 +0800 Subject: [PATCH] Add auto-restart for unexpected worker exits Introduces an isRestarting flag to distinguish between intentional and unexpected worker restarts. If the worker process exits unexpectedly, the system now attempts to automatically restart it and logs relevant warnings and errors. --- packages/napcat-shell/napcat.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/napcat-shell/napcat.ts b/packages/napcat-shell/napcat.ts index 25ee8093..8b4a633c 100644 --- a/packages/napcat-shell/napcat.ts +++ b/packages/napcat-shell/napcat.ts @@ -26,6 +26,7 @@ const logger = new LogWrapper(pathWrapper.logsPath); let processManager: IProcessManager | null = null; let currentWorker: IWorkerProcess | null = null; let isElectron = false; +let isRestarting = false; /** * 获取进程类型名称(用于日志) @@ -72,10 +73,12 @@ function forceKillProcess (pid: number): void { */ export async function restartWorker (): Promise { logger.log('[NapCat] [Process] 正在重启Worker进程...'); + isRestarting = true; if (!currentWorker) { logger.logWarn('[NapCat] [Process] 没有运行中的Worker进程'); await startWorker(); + isRestarting = false; return; } @@ -133,6 +136,7 @@ export async function restartWorker (): Promise { // 5. 启动新进程 await startWorker(); + isRestarting = false; logger.log('[NapCat] [Process] Worker进程重启完成'); } @@ -192,6 +196,13 @@ async function startWorker (): Promise { } else { logger.log(`[NapCat] [${processType}] Worker进程正常退出`); } + // 如果不是由于主动重启引起的退出,尝试自动重新拉起 + if (!isRestarting) { + logger.logWarn(`[NapCat] [${processType}] Worker进程意外退出,正在尝试重新拉起...`); + startWorker().catch(e => { + logger.logError(`[NapCat] [${processType}] 重新拉起Worker进程失败:`, e); + }); + } }); child.on('spawn', () => {