Files
sanguo_vnpy_v2/scripts/nas_sync/sync_parquet_daily.sh
T
claude_dev 7195aa6e25
CI/CD / test (push) Successful in 27s
CI/CD / nas-deploy (push) Successful in 28s
CI/CD / nas-verify (push) Successful in 7s
fix(sync): 修复257bd3b引入的语法死——注释断行致裸引号未闭合,回车字样改中文表述+bash -n防线后置 [nas]
2026-09-08 13:52:20 +08:00

63 lines
2.8 KiB
Bash
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.
#!/bin/bash
# NAS 端:VPS parquet 每日增量同步(仅 per-date 类,按日期精确拉,不扫 mtime)。
#
# 设计背景(2026-07-31 实测):
# - VPS 机械盘扫 parquet 小文件 mtime 极慢(valuation+financial_abstract 11070 文件 >60s),
# bsdtar --newer 增量不可行(印证 phase3 当年弃 rsync 改 SQLite 增量的同一坑)。
# - per-date 类文件名含日期(YYYYMMDD_type.parquet),可按日期精确拉(scp 单文件,不扫目录)。
# - per-stock 类(valuation/三表/northbound 等)文件名无日期,走 sync_parquet.sh 周度全量。
#
# 覆盖:ak-events 每日产出。2026-09-02 起扩到 13 类(原 4 类事件 + A 档 panel 9 类:
# zt_pool×3 + fund_flow×2 + ths×2 + xueqiu_hot + sina_sector,见活文档 §15)。
# 每日拉最近 7 天窗口(容错漏跑几天;节假日无文件=scp 失败=skip 正常)。
# gdhs 为 per-period(季度末日期,永不落 7 天窗),单独全量拉(≤10 个文件,幂等)。
set -u
KEY=/var/services/homes/admin/.ssh/id_ed25519_nas
VPS=Administrator@49.232.102.198
ROOT=/volume1/stock/sanguo_vnpy_v2
DATA=$ROOT/data
LOG=$ROOT/data_backup/parquet_daily.log
TYPES="dragon_tiger block_trade margin_sse restricted zt_pool zt_pool_zbgc zt_pool_dtgc fund_flow_industry fund_flow_concept ths_industry ths_concept xueqiu_hot sina_sector"
WINDOW_DAYS=7
TS=$(date '+%F %T')
echo "=== $TS parquet daily (per-date, ${WINDOW_DAYS}day window) ===" >> "$LOG"
PULLED=0
SKIPPED=0
for type in $TYPES; do
mkdir -p "$DATA/static/$type"
for i in $(seq 0 $((WINDOW_DAYS - 1))); do
d=$(date -d "$i days ago" +%Y%m%d)
file="${d}_${type}.parquet"
if scp -q -i "$KEY" -o StrictHostKeyChecking=no \
"$VPS:C:/sanguo_vnpy_v2/data/static/$type/$file" \
"$DATA/static/$type/" 2>/dev/null; then
PULLED=$((PULLED + 1))
else
SKIPPED=$((SKIPPED + 1))
fi
done
done
# gdhs per-period 全量拉(季度末文件名不在滚动窗口内;周六 ak-weekly 产出,≤10 文件)
mkdir -p "$DATA/static/gdhs"
# dir /b 输出带 CRLF: 回车符粘在文件名尾 → scp 远端路径不存在 → 静默失败 6 天
# (09-02~09-08 NAS gdhs 空)。tr -d 清洗回车符根治。
for f in $(ssh -i "$KEY" -o StrictHostKeyChecking=no \
"$VPS" "dir /b C:\\sanguo_vnpy_v2\\data\\static\\gdhs\\*.parquet" 2>/dev/null | tr -d '\r'); do
# 期文件 write-once(marker 锁定): 已存在即跳过, 补史后 53 文件每日全量重拉是浪费
[ -f "$DATA/static/gdhs/$f" ] && continue
if scp -q -i "$KEY" -o StrictHostKeyChecking=no \
"$VPS:C:/sanguo_vnpy_v2/data/static/gdhs/$f" \
"$DATA/static/gdhs/" 2>/dev/null; then
PULLED=$((PULLED + 1))
else
SKIPPED=$((SKIPPED + 1))
fi
done
echo "[$(date '+%T')] DAILY DONE pulled=$PULLED skipped=$SKIPPED (skip=节假日/未出,正常)" >> "$LOG"