cleanup.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. const logger = require('./logger');
  2. // 处理未捕获的异常
  3. process.on('uncaughtException', (error) => {
  4. logger.error('未捕获的异常:', error);
  5. // 打印完整的堆栈跟踪以便调试
  6. console.error('错误堆栈:', error.stack);
  7. // 不立即退出,以便日志能够被写入
  8. setTimeout(() => {
  9. process.exit(1);
  10. }, 1000);
  11. });
  12. // 处理未处理的Promise拒绝
  13. process.on('unhandledRejection', (reason, promise) => {
  14. logger.error('未处理的Promise拒绝:', reason);
  15. // 打印堆栈跟踪(如果可用)
  16. if (reason instanceof Error) {
  17. console.error('Promise拒绝堆栈:', reason.stack);
  18. }
  19. });
  20. // 处理退出信号
  21. process.on('SIGINT', gracefulShutdown);
  22. process.on('SIGTERM', gracefulShutdown);
  23. // 优雅退出函数
  24. async function gracefulShutdown() {
  25. logger.info('接收到退出信号,正在关闭...');
  26. // 这里可以添加清理代码,如关闭数据库连接等
  27. try {
  28. // 关闭HTTP代理服务
  29. try {
  30. const httpProxyService = require('./services/httpProxyService');
  31. if (httpProxyService && httpProxyService.isRunning) {
  32. logger.info('正在关闭HTTP代理服务...');
  33. await httpProxyService.stop();
  34. }
  35. } catch (err) {
  36. logger.debug('HTTP代理服务未运行,跳过清理');
  37. }
  38. // 关闭数据库连接
  39. try {
  40. const database = require('./database/database');
  41. if (database) {
  42. logger.info('正在关闭数据库连接...');
  43. await database.close();
  44. }
  45. } catch (err) {
  46. logger.debug('数据库未连接,跳过清理');
  47. }
  48. // 关闭任何可能的资源
  49. try {
  50. const docker = require('./services/dockerService').getDockerConnection();
  51. if (docker) {
  52. logger.info('正在关闭Docker连接...');
  53. // 如果有活动的Docker连接,可能需要执行一些清理
  54. }
  55. } catch (err) {
  56. // 忽略错误,可能服务未初始化
  57. logger.debug('Docker服务未初始化,跳过清理');
  58. }
  59. // 清理监控间隔
  60. try {
  61. const monitoringService = require('./services/monitoringService');
  62. if (monitoringService.stopMonitoring) {
  63. logger.info('正在停止容器监控...');
  64. monitoringService.stopMonitoring();
  65. }
  66. } catch (err) {
  67. // 忽略错误,可能服务未初始化
  68. logger.debug('监控服务未初始化,跳过清理');
  69. }
  70. logger.info('所有资源已清理完毕,正在退出...');
  71. } catch (error) {
  72. logger.error('退出过程中出现错误:', error);
  73. }
  74. setTimeout(() => {
  75. logger.info('干净退出完成');
  76. process.exit(0);
  77. }, 1000);
  78. }
  79. logger.info('错误处理和清理脚本已加载');
  80. module.exports = {
  81. gracefulShutdown
  82. };