123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- #!/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();
|