from apscheduler.schedulers.background import BackgroundScheduler from apscheduler.triggers.interval import IntervalTrigger from utils.health_check import HealthChecker from models import HealthCheckConfig, db from app import create_app import logging # 配置日志 logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) def init_scheduler(app): """初始化定时任务调度器""" scheduler = BackgroundScheduler() with app.app_context(): # 获取所有启用的健康检查配置 configs = HealthCheckConfig.query.filter_by(is_enabled=True).all() for config in configs: # 为每个平台添加定时任务 scheduler.add_job( func=lambda platform=config.platform: run_health_check(app, platform), trigger=IntervalTrigger(seconds=config.check_interval), id=f'health_check_{config.platform}', name=f'{config.platform}健康检查', replace_existing=True ) logger.info(f"已添加{config.platform}健康检查任务,间隔{config.check_interval}秒") scheduler.start() logger.info("定时任务调度器已启动") return scheduler def run_health_check(app, platform): """执行健康检查""" with app.app_context(): try: logger.info(f"开始执行{platform}健康检查") HealthChecker.check_platform(platform) logger.info(f"{platform}健康检查完成") except Exception as e: logger.error(f"{platform}健康检查失败: {str(e)}") if __name__ == '__main__': app = create_app() scheduler = init_scheduler(app) try: # 保持程序运行 import time while True: time.sleep(1) except (KeyboardInterrupt, SystemExit): scheduler.shutdown() logger.info("定时任务调度器已停止")