Files
xsl 9b7324cd26 chore: 适配本机 xsl 路径(RTX 5090 机器)
将所有绝对路径从 /home/ubuntu 改回 /home/xsl,覆盖启动脚本、
configure.ini 及训练/测试脚本。纯路径替换,无功能性改动。

本分支(xsl5090)用于本机(RTX 5090)运行;master 维持 /home/ubuntu
供远程 ubuntu 机器使用。
2026-07-18 16:26:16 +08:00

77 lines
3.3 KiB
Bash
Executable File

#!/bin/bash
# 全自动串行 rsync 同步脚本
# 策略:单链路串行传输,避免并行抢带宽;按依赖优先级排序
# 已传数据自动续传(--partial)
set -u
LOGDIR="/home/xsl/change_hair/project/logs"
DONE_MARKER="$LOGDIR/sync_all.done"
mkdir -p "$LOGDIR"
# 如果已全部完成,直接退出
[ -f "$DONE_MARKER" ] && { echo "所有同步任务已完成,跳过"; exit 0; }
# 任务定义:名称|源|目标
# 优先级排序:换发色关键链路优先 → 换发型 → 训练相关 → 大数据最后
TASKS=(
"photo_service|szlc@192.168.101.63:/home/szlc/project/photo_service/|/home/xsl/change_hair/project/photo_service/"
"project_data|szlc@192.168.101.63:/home/szlc/project/data/|/home/xsl/change_hair/project/data/"
"hair_service_sd|szlc@192.168.101.63:/home/szlc/project/hair_service_sd/|/home/xsl/change_hair/project/hair_service_sd/"
"conda_py310|szlc@192.168.101.63:/home/szlc/miniconda3/envs/py310/|/home/xsl/miniconda3/envs/py310/"
"conda_my_hair|szlc@192.168.101.63:/home/szlc/miniconda3/envs/my_hair/|/home/xsl/miniconda3/envs/my_hair/"
"conda_sdwebui|szlc@192.168.101.63:/home/szlc/miniconda3/envs/sdwebui/|/home/xsl/miniconda3/envs/sdwebui/"
"kohya_ss_home|szlc@192.168.101.63:/home/szlc/project/kohya_ss_home/|/home/xsl/change_hair/project/kohya_ss_home/"
"onediff|szlc@192.168.101.63:/home/szlc/project/onediff/|/home/xsl/change_hair/project/onediff/"
"train_material|szlc@192.168.101.63:/data/train_material/|/home/xsl/change_hair/data/train_material/"
)
echo "========================================" | tee -a "$LOGDIR/sync_main.log"
echo "串行同步开始: $(date '+%Y-%m-%d %H:%M:%S')" | tee -a "$LOGDIR/sync_main.log"
echo "========================================" | tee -a "$LOGDIR/sync_main.log"
FAIL=0
for task in "${TASKS[@]}"; do
NAME="${task%%|*}"; rest="${task#*|}"
SRC="${rest%%|*}"; DST="${rest#*|}"
TLOG="$LOGDIR/sync_${NAME}.log"
# 已完成的任务跳过(用标记文件判断)
if [ -f "$LOGDIR/sync_${NAME}.ok" ]; then
echo "[$(date '+%H:%M:%S')] [$NAME] 已完成,跳过" | tee -a "$LOGDIR/sync_main.log"
continue
fi
echo "[$(date '+%H:%M:%S')] [$NAME] 开始: $SRC -> $DST" | tee -a "$LOGDIR/sync_main.log"
mkdir -p "$DST"
# rsync 串行传输,最多重试3次
RETRY=0
while [ $RETRY -lt 3 ]; do
if rsync -a --partial --inplace --info=progress2,NAME0 \
-e "ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o ConnectTimeout=15" \
"$SRC" "$DST" >>"$TLOG" 2>&1; then
touch "$LOGDIR/sync_${NAME}.ok"
echo "[$(date '+%H:%M:%S')] [$NAME] 完成 ✓" | tee -a "$LOGDIR/sync_main.log"
break
else
RETRY=$((RETRY+1))
echo "[$(date '+%H:%M:%S')] [$NAME] 第${RETRY}次失败,重试中..." | tee -a "$LOGDIR/sync_main.log"
sleep 5
fi
done
if [ $RETRY -ge 3 ]; then
echo "[$(date '+%H:%M:%S')] [$NAME] 失败 ✗ (重试3次)" | tee -a "$LOGDIR/sync_main.log"
FAIL=$((FAIL+1))
fi
done
echo "========================================" | tee -a "$LOGDIR/sync_main.log"
echo "同步全部结束: $(date '+%Y-%m-%d %H:%M:%S'), 失败任务数: $FAIL" | tee -a "$LOGDIR/sync_main.log"
echo "========================================" | tee -a "$LOGDIR/sync_main.log"
if [ $FAIL -eq 0 ]; then
touch "$DONE_MARKER"
echo "全部成功完成" | tee -a "$LOGDIR/sync_main.log"
fi