#!/bin/bash # 早盘前同步:stock_basic + industry_sector # - stock_basic:雪球 quote_detail 拉全市场股本快照(~9min @ 5 RPS) # - industry_sector:baostock 拉股票-行业映射(~16min @ 5 RPS) # - 串行执行,industry_sector 依赖 stock_basic # - 与 runall_once.py 区别:不拉 kline_daily / kline_5min 等耗时长任务 set -u PROJECT_ROOT="/home/gao/Development/quant_home/market_sync" LOG_DIR="$PROJECT_ROOT/logs" mkdir -p "$LOG_DIR" TS=$(date +%Y%m%d_%H%M%S) LOG="$LOG_DIR/morning_run_${TS}.log" cd "$PROJECT_ROOT" exec .venv/bin/python -c " import sys, time sys.path.insert(0, '$PROJECT_ROOT') from app.core.datasource.registry import build_default_registry from app.core.sync.registry import seed_sync_registry build_default_registry() seed_sync_registry() from app.tasks import get_task results = [] for tid in ['stock_basic', 'industry_sector']: print(f'[morning-run] >>> 开始 {tid}', flush=True) t0 = time.time() try: r = get_task(tid).run(trigger_source='morning_runall') elapsed = round(time.time() - t0, 1) results.append({'task': tid, 'status': r.get('status'), 'elapsed_sec': elapsed, 'message': r.get('message', '')}) print(f'[morning-run] <<< {tid} status={r.get(\"status\")} elapsed={elapsed}s msg={r.get(\"message\", \"\")}', flush=True) except Exception as e: elapsed = round(time.time() - t0, 1) results.append({'task': tid, 'status': 'error', 'elapsed_sec': elapsed, 'message': str(e)}) print(f'[morning-run] !!! {tid} 异常: {e}', flush=True) time.sleep(5) import json print('[morning-run] summary:', json.dumps(results, ensure_ascii=False)) " > "$LOG" 2>&1