Files
sanguo_vnpy_v2/scripts/nas_sync/sync_valuation_daily.sh
T

63 lines
2.6 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 valuation + financial_abstractak-eod 每日 --force 全量重写)。
#
# 设计迭代(2026-07-31 实测):
# - ak-eod 每日 --force 重写 valuation/financial_abstract(估值随股价每日变)
# - bsdtar --newer 慢盘 stat 不可行;python tarfile 打包 9.5s/1.1GB OK
# - 但 scp 单 tar 1.1GB 跨公网 broken pipe(连接断全丢,retry 难救)
# - 改 scp -r 目录:多文件独立传,单文件失败不牵连(sync_parquet.sh 验证 6.24G 鲁棒)
#
# 调度:ak-eod 19:00 跑完(~21:30)后延迟跑。
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/valuation_daily.log
DIRS="valuation financial_abstract"
TS=$(date '+%F %T')
echo "=== $TS valuation daily (scp -r) ===" >> "$LOG"
for d in $DIRS; do
OK=0
for attempt in 1 2 3; do
if scp -r -i "$KEY" -o StrictHostKeyChecking=no -o ServerAliveInterval=30 -o ServerAliveCountMax=20 \
"$VPS:C:/sanguo_vnpy_v2/data/static/$d" "$DATA/static/" >> "$LOG" 2>&1; then
OK=1
break
fi
echo "[$(date '+%T')] $d scp attempt $attempt fail, retry..." >> "$LOG"
sleep 5
done
echo "[$(date '+%T')] $d $( [ "$OK" = 1 ] && echo OK || echo FAIL )" >> "$LOG"
done
# 根级每日域(2026-08-21 巡检补链): valuation_baostock(bs_eod 每晚写 pe/pb 按年 parquet,
# NAS 断更自 08-16) + fundamentals_baostock(bs_fund 腿每晚回灌 profit/dupont, 08-20 新域
# 此前 NAS 完全没有)。两域均为 MB 级 parquet, scp -r 秒级, 03:09 时 VPS 写盘已静止。
for d in valuation_baostock fundamentals_baostock; do
OK=0
for attempt in 1 2 3; do
if scp -r -i "$KEY" -o StrictHostKeyChecking=no -o ServerAliveInterval=30 -o ServerAliveCountMax=20 \
"$VPS:C:/sanguo_vnpy_v2/data/$d" "$DATA/" >> "$LOG" 2>&1; then
OK=1
break
fi
echo "[$(date '+%T')] $d scp attempt $attempt fail, retry..." >> "$LOG"
sleep 5
done
echo "[$(date '+%T')] $d $( [ "$OK" = 1 ] && echo OK || echo FAIL )" >> "$LOG"
done
# 周日顺带全量刷 per-stock 周更域(ak-weekly 周六重写 balance/cashflow/top_holders 等
# 14 子域; sync_parquet.sh 6.24G/70min, setsid 脱离不阻塞当日链; 上次全量 2026-08-16
# 手动, 其后 top_holders 等已滞后)。与每日增量互补: 每日链兜住快变域, 周日兜住慢变域。
if [ "$(date +%u)" = "7" ]; then
nohup setsid bash "$(dirname "$0")/sync_parquet.sh" </dev/null >> "$LOG" 2>&1 &
echo "[$(date '+%T')] sunday weekly parquet full sync launched (detached)" >> "$LOG"
fi
echo "[$(date '+%T')] valuation daily DONE" >> "$LOG"