12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- const logger = require('./logger');
- // 处理未捕获的异常
- process.on('uncaughtException', (error) => {
- logger.error('未捕获的异常:', error);
- // 打印完整的堆栈跟踪以便调试
- console.error('错误堆栈:', error.stack);
- // 不立即退出,以便日志能够被写入
- setTimeout(() => {
- process.exit(1);
- }, 1000);
- });
- // 处理未处理的Promise拒绝
- process.on('unhandledRejection', (reason, promise) => {
- logger.error('未处理的Promise拒绝:', reason);
- // 打印堆栈跟踪(如果可用)
- if (reason instanceof Error) {
- console.error('Promise拒绝堆栈:', reason.stack);
- }
- });
- // 处理退出信号
- process.on('SIGINT', gracefulShutdown);
- process.on('SIGTERM', gracefulShutdown);
- // 优雅退出函数
- async function gracefulShutdown() {
- logger.info('接收到退出信号,正在关闭...');
-
- // 这里可以添加清理代码,如关闭数据库连接等
- try {
- // 关闭HTTP代理服务
- try {
- const httpProxyService = require('./services/httpProxyService');
- if (httpProxyService && httpProxyService.isRunning) {
- logger.info('正在关闭HTTP代理服务...');
- await httpProxyService.stop();
- }
- } catch (err) {
- logger.debug('HTTP代理服务未运行,跳过清理');
- }
- // 关闭数据库连接
- try {
- const database = require('./database/database');
- if (database) {
- logger.info('正在关闭数据库连接...');
- await database.close();
- }
- } catch (err) {
- logger.debug('数据库未连接,跳过清理');
- }
-
- // 关闭任何可能的资源
- try {
- const docker = require('./services/dockerService').getDockerConnection();
- if (docker) {
- logger.info('正在关闭Docker连接...');
- // 如果有活动的Docker连接,可能需要执行一些清理
- }
- } catch (err) {
- // 忽略错误,可能服务未初始化
- logger.debug('Docker服务未初始化,跳过清理');
- }
-
- // 清理监控间隔
- try {
- const monitoringService = require('./services/monitoringService');
- if (monitoringService.stopMonitoring) {
- logger.info('正在停止容器监控...');
- monitoringService.stopMonitoring();
- }
- } catch (err) {
- // 忽略错误,可能服务未初始化
- logger.debug('监控服务未初始化,跳过清理');
- }
-
- logger.info('所有资源已清理完毕,正在退出...');
- } catch (error) {
- logger.error('退出过程中出现错误:', error);
- }
-
- setTimeout(() => {
- logger.info('干净退出完成');
- process.exit(0);
- }, 1000);
- }
- logger.info('错误处理和清理脚本已加载');
- module.exports = {
- gracefulShutdown
- };
|