Files
auv/recollect-daily.sh
T
SakurasanandClaude c610faa4ad chore: 新增服务器端清理重采脚本 recollect-daily.sh
选股逻辑变更后,服务器上当天旧数据需删除重采(幂等会跳过)。
脚本默认容器 auv、日期取服务器当天,支持显式传参;含日期格式与容器存在性校验。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-10 22:33:13 +08:00

63 lines
2.0 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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 "✅ 完成"