chore: 新增服务器端清理重采脚本 recollect-daily.sh

选股逻辑变更后,服务器上当天旧数据需删除重采(幂等会跳过)。
脚本默认容器 auv、日期取服务器当天,支持显式传参;含日期格式与容器存在性校验。

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Sakurasan
2026-08-10 22:33:13 +08:00
co-authored by Claude
parent f93ffd381b
commit c610faa4ad
+62
View File
@@ -0,0 +1,62 @@
#!/usr/bin/env bash
# 服务器端脚本:清理指定交易日旧数据,并用新选股逻辑重新采集入库。
#
# 适用场景:核心股追踪选股逻辑更新后,服务器上当天数据仍是旧口径,
# 需要删掉重采(采集器幂等,不删会被 _has_collected 跳过)。
#
# 用法(在服务器上执行):
# ./recollect-daily.sh [日期] # 日期默认取服务器当天,格式 YYYY-MM-DD
# ./recollect-daily.sh 2026-08-10 # 显式指定交易日
#
# 依赖:docker 容器名为 auvdocker-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 "✅ 完成"