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', () => {