From c610faa4adb46ec0a084873e795625b2660b8ba5 Mon Sep 17 00:00:00 2001 From: Sakurasan <26715255+Sakurasan@users.noreply.github.com> Date: Mon, 10 Aug 2026 22:33:13 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E6=96=B0=E5=A2=9E=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=99=A8=E7=AB=AF=E6=B8=85=E7=90=86=E9=87=8D=E9=87=87=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=20recollect-daily.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 选股逻辑变更后,服务器上当天旧数据需删除重采(幂等会跳过)。 脚本默认容器 auv、日期取服务器当天,支持显式传参;含日期格式与容器存在性校验。 Co-Authored-By: Claude --- recollect-daily.sh | 62 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100755 recollect-daily.sh 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 "✅ 完成"