From dc7ee632b927c5f2a475a81d6ea738fe64835f8e Mon Sep 17 00:00:00 2001 From: claude_dev Date: Fri, 21 Aug 2026 23:16:03 +0800 Subject: [PATCH] =?UTF-8?q?fix(nas):=20NAS=E5=90=8C=E6=AD=A5=E9=93=BE?= =?UTF-8?q?=E8=A1=A5=E4=B8=A4=E4=B8=AA=E6=96=AD=E6=9B=B4=E5=9F=9F+?= =?UTF-8?q?=E5=91=A8=E6=97=A5=E5=91=A8=E6=9B=B4=E5=85=A8=E9=87=8F=E6=8C=82?= =?UTF-8?q?=E8=BD=BD=E2=80=94=E2=80=942026-08-21=E6=99=9A=E5=85=A8?= =?UTF-8?q?=E5=9F=9F=E5=B7=A1=E6=A3=80=E5=AE=9E=E9=94=A4:=E6=AF=8F?= =?UTF-8?q?=E6=97=A5=E9=93=BE(dbbardata=E5=A2=9E=E9=87=8F03:00/=E5=B0=8F?= =?UTF-8?q?=E8=A1=A8/events=E5=9B=9B=E7=B1=BB/valuation+financial=5Fabstra?= =?UTF-8?q?ct=2003:09)=E5=85=A8=E7=BB=BF,=E4=BD=86=E2=91=A0valuation=5Fbao?= =?UTF-8?q?stock(bs=5Feod=E6=AF=8F=E6=99=9A=E5=86=99pe/pb=E6=8C=89?= =?UTF-8?q?=E5=B9=B4parquet)NAS=E6=96=AD=E6=9B=B4=E8=87=AA08-16=E2=91=A1fu?= =?UTF-8?q?ndamentals=5Fbaostock(08-20=E6=96=B0=E5=9F=9F,fund=E8=85=BF?= =?UTF-8?q?=E6=AF=8F=E6=99=9A=E5=9B=9E=E7=81=8Cprofit/dupont)NAS=E5=AE=8C?= =?UTF-8?q?=E5=85=A8=E4=B8=8D=E5=AD=98=E5=9C=A8,=E4=B8=A4=E5=9F=9F?= =?UTF-8?q?=E6=97=A0=E4=BB=BB=E4=BD=95=E5=90=8C=E6=AD=A5=E5=99=A8=E8=A6=86?= =?UTF-8?q?=E7=9B=96;=E2=91=A2per-stock=E5=91=A8=E6=9B=B414=E5=AD=90?= =?UTF-8?q?=E5=9F=9F(balance/cashflow/top=5Fholders=E7=AD=89,sync=5Fparque?= =?UTF-8?q?t.sh=206.24G=E5=85=A8=E9=87=8F)=E4=BB=8E=E6=9C=AA=E8=A2=AB?= =?UTF-8?q?=E8=B0=83=E5=BA=A6,=E4=BB=8508-16=E6=89=8B=E5=8A=A8=E8=B7=91?= =?UTF-8?q?=E8=BF=87=E4=B8=80=E6=AC=A1,top=5Fholders=E5=B7=B2=E6=BC=8FVPS?= =?UTF-8?q?=2008-16=2018:18=E6=89=B9=E6=AC=A1=E3=80=82=E4=BF=AE=3D?= =?UTF-8?q?=E6=89=A9=E5=B1=95sync=5Fvaluation=5Fdaily.sh(=E6=AF=8F?= =?UTF-8?q?=E6=97=A5=E5=AE=9E=E8=B7=91=E8=BD=BD=E4=BD=93):=E5=BE=AA?= =?UTF-8?q?=E7=8E=AF=E5=A4=96=E5=8A=A0valuation=5Fbaostock+fundamentals=5F?= =?UTF-8?q?baostock=E4=B8=A4=E5=9F=9Fscp=20-r(MB=E7=BA=A7=E7=A7=92?= =?UTF-8?q?=E7=BA=A7,03:09=E6=97=B6VPS=E5=86=99=E7=9B=98=E5=B7=B2=E9=9D=99?= =?UTF-8?q?=E6=AD=A2,=E5=90=8C=E6=AC=BE3=E6=AC=A1=E9=87=8D=E8=AF=95)+?= =?UTF-8?q?=E5=91=A8=E6=97=A5(date=20+%u=3D7)setsid=E8=84=B1=E7=A6=BB?= =?UTF-8?q?=E6=8C=82sync=5Fparquet.sh=E5=91=A8=E6=9B=B4=E5=85=A8=E9=87=8F(?= =?UTF-8?q?ak-weekly=E5=91=A8=E5=85=AD=E9=87=8D=E5=86=99=E5=90=8E=E5=91=A8?= =?UTF-8?q?=E6=97=A5=E5=85=9C=E5=BA=95);sync=5Fparquet.sh=E5=85=A8?= =?UTF-8?q?=E9=87=8F=E6=B8=85=E5=8D=95=E8=A1=A5fundamentals=5Fbaostock?= =?UTF-8?q?=E6=BA=90+du=E5=AF=B9=E9=BD=90;bash=20-n=E8=BF=87=20[nas]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/nas_sync/sync_parquet.sh | 5 +++-- scripts/nas_sync/sync_valuation_daily.sh | 25 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/scripts/nas_sync/sync_parquet.sh b/scripts/nas_sync/sync_parquet.sh index e6913b6..9fc4c17 100644 --- a/scripts/nas_sync/sync_parquet.sh +++ b/scripts/nas_sync/sync_parquet.sh @@ -16,7 +16,8 @@ SCP_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" \ - "$VPS:C:/sanguo_vnpy_v2/data/valuation_baostock" ./ >> "$LOG" 2>&1; then + "$VPS:C:/sanguo_vnpy_v2/data/valuation_baostock" \ + "$VPS:C:/sanguo_vnpy_v2/data/fundamentals_baostock" ./ >> "$LOG" 2>&1; then SCP_OK=1 break fi @@ -25,5 +26,5 @@ for attempt in 1 2 3; do done echo "SCP_RC OK=$SCP_OK $(date)" >> "$LOG" -du -sh "$DATA/static" "$DATA/valuation_baostock" >> "$LOG" 2>&1 +du -sh "$DATA/static" "$DATA/valuation_baostock" "$DATA/fundamentals_baostock" >> "$LOG" 2>&1 echo "PARQUET_DONE $(date)" >> "$LOG" diff --git a/scripts/nas_sync/sync_valuation_daily.sh b/scripts/nas_sync/sync_valuation_daily.sh index b61acef..c4176ac 100644 --- a/scripts/nas_sync/sync_valuation_daily.sh +++ b/scripts/nas_sync/sync_valuation_daily.sh @@ -34,4 +34,29 @@ for d in $DIRS; do 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" > "$LOG" 2>&1 & + echo "[$(date '+%T')] sunday weekly parquet full sync launched (detached)" >> "$LOG" +fi + echo "[$(date '+%T')] valuation daily DONE" >> "$LOG"