63 lines
2.6 KiB
Bash
63 lines
2.6 KiB
Bash
#!/bin/bash
|
||
# NAS 端:每日同步 VPS valuation + financial_abstract(ak-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"
|