#!/usr/bin/env node const { spawn } = require('child_process'); const path = require('path'); const fs = require('fs'); console.log('🚀 启动Clash节点测速工具...\n'); // 检查环境变量文件 const envFile = path.join(__dirname, '.env'); if (!fs.existsSync(envFile)) { console.log('⚠️ 未找到.env文件,请先复制env.example为.env并配置相关参数'); console.log(' 命令: cp env.example .env'); process.exit(1); } // 检查数据库连接 async function checkDatabase() { try { const sequelize = require('./src/config/database'); await sequelize.authenticate(); console.log('✅ 数据库连接正常'); return true; } catch (error) { console.log('❌ 数据库连接失败:', error.message); console.log(' 请检查数据库配置和连接'); return false; } } // 检查Telegram配置 function checkTelegram() { const botToken = process.env.TELEGRAM_BOT_TOKEN; const chatId = process.env.TELEGRAM_CHAT_ID; if (!botToken || !chatId) { console.log('⚠️ Telegram配置不完整,通知功能将被禁用'); console.log(' 请配置TELEGRAM_BOT_TOKEN和TELEGRAM_CHAT_ID'); return false; } console.log('✅ Telegram配置正常'); console.log(` Bot Token: ${botToken.substring(0, 10)}...${botToken.substring(botToken.length - 10)}`); console.log(` Chat ID: ${chatId}`); return true; } // 主启动函数 async function start() { try { // 加载环境变量 require('dotenv').config(); // 检查配置 const dbOk = await checkDatabase(); if (!dbOk) { process.exit(1); } checkTelegram(); console.log('\n📊 系统信息:'); console.log(` 端口: ${process.env.PORT || 3000}`); console.log(` 环境: ${process.env.NODE_ENV || 'development'}`); console.log(` 测速间隔: ${process.env.SPEED_TEST_INTERVAL || 15}分钟`); console.log(` 测试超时: ${process.env.SPEED_TEST_TIMEOUT || 10000}ms`); console.log(` 订阅更新间隔: ${(process.env.SUBSCRIPTION_UPDATE_INTERVAL || 3600000) / 1000}秒`); console.log('\n🌐 应用地址:'); console.log(` 前端界面: http://localhost:${process.env.PORT || 3000}`); console.log('\n🔄 启动应用...\n'); // 启动应用 const app = spawn('node', ['src/app.js'], { stdio: 'inherit', cwd: __dirname }); app.on('error', (error) => { console.error('❌ 启动失败:', error.message); process.exit(1); }); app.on('exit', (code) => { if (code !== 0) { console.error(`❌ 应用异常退出,退出码: ${code}`); process.exit(code); } }); } catch (error) { console.error('❌ 启动过程中发生错误:', error.message); process.exit(1); } } // 处理信号 process.on('SIGINT', () => { console.log('\n\n👋 正在关闭应用...'); process.exit(0); }); process.on('SIGTERM', () => { console.log('\n\n👋 正在关闭应用...'); process.exit(0); }); // 启动 start();