diff --git a/recollect-daily.sh b/recollect-daily.sh new file mode 100755 index 0000000..e95d4e4 --- /dev/null +++ b/recollect-daily.sh @@ -0,0 +1,62 @@ +#!/usr/bin/env bash +# 服务器端脚本:清理指定交易日旧数据,并用新选股逻辑重新采集入库。 +# +# 适用场景:核心股追踪选股逻辑更新后,服务器上当天数据仍是旧口径, +# 需要删掉重采(采集器幂等,不删会被 _has_collected 跳过)。 +# +# 用法(在服务器上执行): +# ./recollect-daily.sh [日期] # 日期默认取服务器当天,格式 YYYY-MM-DD +# ./recollect-daily.sh 2026-08-10 # 显式指定交易日 +# +# 依赖:docker 容器名为 auv(docker-compose.yml 中 container_name) + +set -euo pipefail + +CONTAINER="${CONTAINER:-auv}" +DATE="${1:-$(date +%F)}" + +# 校验日期格式,防止注入/拼错 +if ! [[ "${DATE}" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then + echo "❌ 日期格式错误:${DATE}(应为 YYYY-MM-DD)" + exit 1 +fi + +echo "================================================" +echo "🚀 容器: ${CONTAINER} 交易日: ${DATE}" +echo "================================================" + +# 确认容器在运行 +if ! docker ps --format '{{.Names}}' | grep -qx "${CONTAINER}"; then + echo "❌ 容器 ${CONTAINER} 未在运行" + exit 1 +fi + +echo "" +echo "① 删除 ${DATE} 旧数据" +# 通过环境变量传日期,避免日期值混入 python -c 的字符串拼接 +docker exec -e TARGET_DATE="${DATE}" "${CONTAINER}" python -c " +import os +from database import get_connection +date = os.environ['TARGET_DATE'] +conn = get_connection() +try: + for tbl in ('daily_core_stocks', 'daily_core_stock_themes', 'daily_top_themes'): + cur = conn.execute('DELETE FROM ' + tbl + ' WHERE trade_date = ?', (date,)) + print(f' {tbl}: 删除 {cur.rowcount} 行') + conn.commit() +finally: + conn.close() +" + +echo "" +echo "② 用新选股逻辑重采 ${DATE}" +docker exec -e TARGET_DATE="${DATE}" "${CONTAINER}" python -c " +import asyncio +import os +from services.daily_collector import collect_daily +result = asyncio.run(collect_daily(os.environ['TARGET_DATE'])) +print(' 结果:', result) +" + +echo "" +echo "✅ 完成"