#!/bin/bash # NAS 端:VPS parquet(static+valuation) 全量 scp pull(一次性备份,非每日)。 # 脱离 ssh 会话运行(避免 sshd 关会话杀进程组): # nohup setsid bash sync_parquet.sh /dev/null 2>&1 & set -u KEY=/var/services/homes/admin/.ssh/id_ed25519_nas VPS=Administrator@49.232.102.198 DATA=/volume1/stock/sanguo_vnpy_v2/data LOG=/volume1/stock/sanguo_vnpy_v2/data_backup/parquet.log echo "=== parquet scp start $(date) ===" >> "$LOG" cd "$DATA" || { echo "cd fail" >> "$LOG"; exit 1; } # scp -r 覆盖式拉取(6.24GB 全量约 70min;ServerAliveInterval 保活防跨公网 broken pipe + retry 兜底) 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 SCP_OK=1 break fi echo "[$(date '+%T')] scp attempt $attempt broken pipe, retry..." >> "$LOG" sleep 10 done echo "SCP_RC OK=$SCP_OK $(date)" >> "$LOG" du -sh "$DATA/static" "$DATA/valuation_baostock" >> "$LOG" 2>&1 echo "PARQUET_DONE $(date)" >> "$LOG"