fix(nas): sync_parquet.sh加互斥锁防周日双触发撕损——DSM id=6(周日04:00)当年配置即跑本脚本全量但从未实证(无parquet.log,当时标注待用户DSM UI确认命令),08-21又挂了sync_valuation_daily.sh周日钩子(~03:3x)同一脚本,两路若同日都触发=双scp -r并发写同文件撕损parquet;mkdir原子锁+>6h陈旧覆盖(单跑70min远不到)+trap EXIT清理,哪路先到哪路跑,后到skip留痕 [nas]
CI/CD / test (push) Successful in 7s
CI/CD / nas-deploy (push) Successful in 27s
CI/CD / nas-verify (push) Successful in 7s

This commit is contained in:
2026-08-21 23:18:06 +08:00
parent dc7ee632b9
commit cbf2db8069
+13
View File
@@ -8,6 +8,19 @@ VPS=Administrator@49.232.102.198
DATA=/volume1/stock/sanguo_vnpy_v2/data
LOG=/volume1/stock/sanguo_vnpy_v2/data_backup/parquet.log
# 互斥锁(2026-08-21): 触发源两路=周日钩子(sync_valuation_daily.sh)与 DSM id=6 周日04:00,
# 双 scp -r 并发写同文件会撕损; mkdir 原子锁, >6h 视陈旧覆盖(单跑 70min 远不到)。
LOCK=/volume1/stock/sanguo_vnpy_v2/data_backup/parquet_full.lock
if [ -d "$LOCK" ]; then
if [ -z "$(find "$LOCK" -maxdepth 0 -mmin +360 2>/dev/null)" ]; then
echo "[$(date '+%T')] lock held, another full sync running -> skip" >> "$LOG"
exit 0
fi
rmdir "$LOCK" 2>/dev/null
fi
mkdir "$LOCK" 2>/dev/null || { echo "[$(date '+%T')] lock mkdir fail" >> "$LOG"; exit 1; }
trap 'rmdir "$LOCK" 2>/dev/null' EXIT
echo "=== parquet scp start $(date) ===" >> "$LOG"
cd "$DATA" || { echo "cd fail" >> "$LOG"; exit 1; }