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.
This commit is contained in:
手瓜一十雪 2026-01-17 18:38:12 +08:00
parent 163bb88751
commit d4478275ee

View File

@ -26,6 +26,7 @@ const logger = new LogWrapper(pathWrapper.logsPath);
let processManager: IProcessManager | null = null; let processManager: IProcessManager | null = null;
let currentWorker: IWorkerProcess | null = null; let currentWorker: IWorkerProcess | null = null;
let isElectron = false; let isElectron = false;
let isRestarting = false;
/** /**
* *
@ -72,10 +73,12 @@ function forceKillProcess (pid: number): void {
*/ */
export async function restartWorker (): Promise<void> { export async function restartWorker (): Promise<void> {
logger.log('[NapCat] [Process] 正在重启Worker进程...'); logger.log('[NapCat] [Process] 正在重启Worker进程...');
isRestarting = true;
if (!currentWorker) { if (!currentWorker) {
logger.logWarn('[NapCat] [Process] 没有运行中的Worker进程'); logger.logWarn('[NapCat] [Process] 没有运行中的Worker进程');
await startWorker(); await startWorker();
isRestarting = false;
return; return;
} }
@ -133,6 +136,7 @@ export async function restartWorker (): Promise<void> {
// 5. 启动新进程 // 5. 启动新进程
await startWorker(); await startWorker();
isRestarting = false;
logger.log('[NapCat] [Process] Worker进程重启完成'); logger.log('[NapCat] [Process] Worker进程重启完成');
} }
@ -192,6 +196,13 @@ async function startWorker (): Promise<void> {
} else { } else {
logger.log(`[NapCat] [${processType}] Worker进程正常退出`); logger.log(`[NapCat] [${processType}] Worker进程正常退出`);
} }
// 如果不是由于主动重启引起的退出,尝试自动重新拉起
if (!isRestarting) {
logger.logWarn(`[NapCat] [${processType}] Worker进程意外退出正在尝试重新拉起...`);
startWorker().catch(e => {
logger.logError(`[NapCat] [${processType}] 重新拉起Worker进程失败:`, e);
});
}
}); });
child.on('spawn', () => { child.on('spawn', () => {