mirror of
https://github.com/whyour/qinglong.git
synced 2025-11-22 16:38:33 +08:00
更新启动日志
This commit is contained in:
parent
af96bd98ac
commit
0e5de4a824
38
back/app.ts
38
back/app.ts
|
|
@ -60,11 +60,11 @@ class Application {
|
||||||
// Wait for gRPC worker to signal it's ready before starting HTTP worker
|
// Wait for gRPC worker to signal it's ready before starting HTTP worker
|
||||||
this.waitForWorkerReady(grpcWorker, 30000)
|
this.waitForWorkerReady(grpcWorker, 30000)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
Logger.info('gRPC worker is ready, starting HTTP worker');
|
Logger.info('✌️ gRPC worker is ready, starting HTTP worker');
|
||||||
this.httpWorker = this.forkWorker('http');
|
this.httpWorker = this.forkWorker('http');
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
Logger.error('Failed to wait for gRPC worker:', error);
|
Logger.error('✌️ Failed to wait for gRPC worker:', error);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -73,7 +73,7 @@ class Application {
|
||||||
if (metadata) {
|
if (metadata) {
|
||||||
if (!this.isShuttingDown) {
|
if (!this.isShuttingDown) {
|
||||||
Logger.error(
|
Logger.error(
|
||||||
`${metadata.serviceType} worker ${worker.process.pid} died (${signal || code
|
`✌️ ${metadata.serviceType} worker ${worker.process.pid} died (${signal || code
|
||||||
}). Restarting...`,
|
}). Restarting...`,
|
||||||
);
|
);
|
||||||
// If gRPC worker died, restart it and wait for it to be ready
|
// If gRPC worker died, restart it and wait for it to be ready
|
||||||
|
|
@ -81,26 +81,26 @@ class Application {
|
||||||
const newGrpcWorker = this.forkWorker('grpc');
|
const newGrpcWorker = this.forkWorker('grpc');
|
||||||
this.waitForWorkerReady(newGrpcWorker, 30000)
|
this.waitForWorkerReady(newGrpcWorker, 30000)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
Logger.info('gRPC worker restarted and ready');
|
Logger.info('✌️ gRPC worker restarted and ready');
|
||||||
// Re-register cron jobs by notifying the HTTP worker
|
// Re-register cron jobs by notifying the HTTP worker
|
||||||
if (this.httpWorker) {
|
if (this.httpWorker) {
|
||||||
try {
|
try {
|
||||||
this.httpWorker.send('reregister-crons');
|
this.httpWorker.send('reregister-crons');
|
||||||
Logger.info('Sent reregister-crons message to HTTP worker');
|
Logger.info('✌️ Sent reregister-crons message to HTTP worker');
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
Logger.error('Failed to send reregister-crons message:', error);
|
Logger.error('✌️ Failed to send reregister-crons message:', error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
Logger.error('Failed to restart gRPC worker:', error);
|
Logger.error('✌️ Failed to restart gRPC worker:', error);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// For HTTP worker, just restart it
|
// For HTTP worker, just restart it
|
||||||
const newWorker = this.forkWorker(metadata.serviceType);
|
const newWorker = this.forkWorker(metadata.serviceType);
|
||||||
this.httpWorker = newWorker;
|
this.httpWorker = newWorker;
|
||||||
Logger.info(`Restarted ${metadata.serviceType} worker (PID: ${newWorker.process.pid})`);
|
Logger.info(`✌️ Restarted ${metadata.serviceType} worker (PID: ${newWorker.process.pid})`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -169,7 +169,7 @@ class Application {
|
||||||
if (worker) {
|
if (worker) {
|
||||||
const exitPromise = new Promise<void>((resolve) => {
|
const exitPromise = new Promise<void>((resolve) => {
|
||||||
worker.once('exit', () => {
|
worker.once('exit', () => {
|
||||||
Logger.info(`Worker ${worker.process.pid} exited`);
|
Logger.info(`✌️ Worker ${worker.process.pid} exited`);
|
||||||
resolve();
|
resolve();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -177,7 +177,7 @@ class Application {
|
||||||
worker.send('shutdown');
|
worker.send('shutdown');
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
Logger.warn(
|
Logger.warn(
|
||||||
`Failed to send shutdown to worker ${worker.process.pid}:`,
|
`✌️ Failed to send shutdown to worker ${worker.process.pid}:`,
|
||||||
error,
|
error,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -192,14 +192,14 @@ class Application {
|
||||||
Promise.all(workerPromises),
|
Promise.all(workerPromises),
|
||||||
new Promise<void>((resolve) => {
|
new Promise<void>((resolve) => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
Logger.warn('Worker shutdown timeout reached');
|
Logger.warn('✌️ Worker shutdown timeout reached');
|
||||||
resolve();
|
resolve();
|
||||||
}, 10000);
|
}, 10000);
|
||||||
}),
|
}),
|
||||||
]);
|
]);
|
||||||
process.exit(0);
|
process.exit(0);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
Logger.error('Error during worker shutdown:', error);
|
Logger.error('✌️ Error during worker shutdown:', error);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -211,7 +211,7 @@ class Application {
|
||||||
private async startWorkerProcess() {
|
private async startWorkerProcess() {
|
||||||
const serviceType = process.env.SERVICE_TYPE;
|
const serviceType = process.env.SERVICE_TYPE;
|
||||||
if (!serviceType || !['http', 'grpc'].includes(serviceType)) {
|
if (!serviceType || !['http', 'grpc'].includes(serviceType)) {
|
||||||
Logger.error('Invalid SERVICE_TYPE:', serviceType);
|
Logger.error('✌️ Invalid SERVICE_TYPE:', serviceType);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -226,7 +226,7 @@ class Application {
|
||||||
|
|
||||||
process.send?.('ready');
|
process.send?.('ready');
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
Logger.error(`${serviceType} worker failed:`, error);
|
Logger.error(`✌️ ${serviceType} worker failed:`, error);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -265,13 +265,13 @@ class Application {
|
||||||
} else if (msg === 'reregister-crons' && serviceType === 'http') {
|
} else if (msg === 'reregister-crons' && serviceType === 'http') {
|
||||||
// Re-register cron jobs when gRPC worker restarts
|
// Re-register cron jobs when gRPC worker restarts
|
||||||
try {
|
try {
|
||||||
Logger.info('Received reregister-crons message, re-registering cron jobs...');
|
Logger.info('✌️ Received reregister-crons message, re-registering cron jobs...');
|
||||||
const CronService = (await import('./services/cron')).default;
|
const CronService = (await import('./services/cron')).default;
|
||||||
const cronService = Container.get(CronService);
|
const cronService = Container.get(CronService);
|
||||||
await cronService.autosave_crontab();
|
await cronService.autosave_crontab();
|
||||||
Logger.info('Cron jobs re-registered successfully');
|
Logger.info('✌️ Cron jobs re-registered successfully');
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
Logger.error('Failed to re-register cron jobs:', error);
|
Logger.error('✌️ Failed to re-register cron jobs:', error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -293,7 +293,7 @@ class Application {
|
||||||
}
|
}
|
||||||
process.exit(0);
|
process.exit(0);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
Logger.error(`[${serviceType}] Error during shutdown:`, error);
|
Logger.error(`✌️ [${serviceType}] Error during shutdown:`, error);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -301,6 +301,6 @@ class Application {
|
||||||
|
|
||||||
const app = new Application();
|
const app = new Application();
|
||||||
app.start().catch((error) => {
|
app.start().catch((error) => {
|
||||||
Logger.error('Application failed to start:', error);
|
Logger.error('🙅♀️ Application failed to start:', error);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user