Refactor worker restart to control quick login param

Modified the restartWorker and startWorker functions to control whether the quick login parameter (-q/--qq) is passed to the worker process. On restart, quick login is not passed, while on unexpected exits, it is preserved. This improves process management and parameter handling during worker lifecycle events.
This commit is contained in:
手瓜一十雪 2026-01-17 18:56:53 +08:00
parent 0ba5862753
commit 67d6cd3f2e

View File

@ -77,7 +77,7 @@ export async function restartWorker (): Promise<void> {
if (!currentWorker) { if (!currentWorker) {
logger.logWarn('[NapCat] [Process] 没有运行中的Worker进程'); logger.logWarn('[NapCat] [Process] 没有运行中的Worker进程');
await startWorker(); await startWorker(false);
isRestarting = false; isRestarting = false;
return; return;
} }
@ -134,16 +134,17 @@ export async function restartWorker (): Promise<void> {
logger.log('[NapCat] [Process] Worker进程已关闭等待 3 秒后启动新进程...'); logger.log('[NapCat] [Process] Worker进程已关闭等待 3 秒后启动新进程...');
await new Promise(resolve => setTimeout(resolve, 3000)); await new Promise(resolve => setTimeout(resolve, 3000));
// 5. 启动新进程 // 5. 启动新进程(重启模式不传递快速登录参数)
await startWorker(); await startWorker(false);
isRestarting = false; isRestarting = false;
logger.log('[NapCat] [Process] Worker进程重启完成'); logger.log('[NapCat] [Process] Worker进程重启完成');
} }
/** /**
* Worker * Worker
* @param passQuickLogin true false
*/ */
async function startWorker (): Promise<void> { async function startWorker (passQuickLogin: boolean = true): Promise<void> {
if (!processManager) { if (!processManager) {
throw new Error('进程管理器未初始化'); throw new Error('进程管理器未初始化');
} }
@ -151,8 +152,21 @@ async function startWorker (): Promise<void> {
const workerScript = getWorkerScriptPath(); const workerScript = getWorkerScriptPath();
const processType = getProcessTypeName(); const processType = getProcessTypeName();
// 传递 master 进程的命令行参数给 worker 进程 // 只在首次启动时传递 -q 或 --qq 参数给 worker 进程
const child = processManager.createWorker(workerScript, process.argv.slice(2), { const workerArgs: string[] = [];
if (passQuickLogin) {
const args = process.argv.slice(2);
const qIndex = args.findIndex(arg => arg === '-q' || arg === '--qq');
if (qIndex !== -1 && qIndex + 1 < args.length) {
const qFlag = args[qIndex];
const qValue = args[qIndex + 1];
if (qFlag && qValue) {
workerArgs.push(qFlag, qValue);
}
}
}
const child = processManager.createWorker(workerScript, workerArgs, {
env: { env: {
...process.env, ...process.env,
NAPCAT_WORKER_PROCESS: '1', NAPCAT_WORKER_PROCESS: '1',
@ -197,10 +211,10 @@ async function startWorker (): Promise<void> {
} else { } else {
logger.log(`[NapCat] [${processType}] Worker进程正常退出`); logger.log(`[NapCat] [${processType}] Worker进程正常退出`);
} }
// 如果不是由于主动重启引起的退出,尝试自动重新拉起 // 如果不是由于主动重启引起的退出,尝试自动重新拉起(保留快速登录参数)
if (!isRestarting) { if (!isRestarting) {
logger.logWarn(`[NapCat] [${processType}] Worker进程意外退出正在尝试重新拉起...`); logger.logWarn(`[NapCat] [${processType}] Worker进程意外退出正在尝试重新拉起...`);
startWorker().catch(e => { startWorker(true).catch(e => {
logger.logError(`[NapCat] [${processType}] 重新拉起Worker进程失败:`, e); logger.logError(`[NapCat] [${processType}] 重新拉起Worker进程失败:`, e);
}); });
} }