#!/bin/bash BASE_DIR="$(cd "$(dirname "$0")" && pwd)" # 自动检测 conda 安装路径 if [ -z "$CONDA_BASE" ]; then if command -v conda >/dev/null 2>&1; then CONDA_BASE="$(conda info --base 2>/dev/null)" fi fi CONDA_BASE="${CONDA_BASE:-$HOME/miniconda3}" export CONDA_BASE mkdir -p "$BASE_DIR/logs" # 检查端口是否被占用,如占用则提示 check_port() { local port=$1 local name=$2 if lsof -i :$port >/dev/null 2>&1; then echo "⚠ 端口 $port ($name) 已被占用,可能服务已在运行" echo " 如需重启,请先运行: ./stop_all_services.sh" return 1 fi return 0 } echo "=== 启动换发型服务 ===" echo "BASE_DIR: $BASE_DIR" echo "CONDA_BASE: $CONDA_BASE" echo "" # 检查 conda 环境是否存在 for env_name in my_hair sdwebui py310; do if [ ! -f "$CONDA_BASE/envs/$env_name/bin/python" ]; then echo "✗ conda 环境 $env_name 不存在,请先运行 ./setup.sh" exit 1 fi done # 1. hair_service_sd (端口 8801) echo "[1/3] 启动 hair_service_sd (端口 8801)..." if check_port 8801 "hair_service_sd"; then cd "$BASE_DIR/hair_service_sd" nohup "$CONDA_BASE/envs/my_hair/bin/python" run_copy_cost_colorb64.py > "$BASE_DIR/logs/hair_service.log" 2>&1 & echo " hair_service_sd 已启动 (PID: $!, 端口 8801)" fi # 2. stable-diffusion-webui (端口 57860) echo "[2/3] 启动 stable-diffusion-webui (端口 57860)..." if check_port 57860 "webui"; then cd "$BASE_DIR/stable-diffusion-webui" nohup "$CONDA_BASE/envs/sdwebui/bin/python" webui.py --api --listen --xformers --port 57860 > "$BASE_DIR/logs/webui.log" 2>&1 & echo " stable-diffusion-webui 已启动 (PID: $!, 端口 57860)" echo " ℹ WebUI 首次启动需加载模型(约 30-60 秒),请耐心等待" fi # 3. photo_service (端口 32678) echo "[3/3] 启动 photo_service (端口 32678)..." if check_port 32678 "photo_service"; then cd "$BASE_DIR/photo_service" nohup "$CONDA_BASE/envs/py310/bin/python" lora_train_service_1.py > "$BASE_DIR/logs/photo_service.log" 2>&1 & echo " photo_service 已启动 (PID: $!, 端口 32678)" fi echo "" echo "=== 所有服务已启动 ===" echo "日志目录: $BASE_DIR/logs/" echo "" echo "查看日志:" echo " tail -f $BASE_DIR/logs/hair_service.log # 换发型/换发色" echo " tail -f $BASE_DIR/logs/webui.log # SD WebUI" echo " tail -f $BASE_DIR/logs/photo_service.log # 训练服务" echo "" echo "停止服务: ./stop_all_services.sh" echo "" echo "等待 WebUI 就绪(检查端口 57860)..." for i in $(seq 1 60); do if curl -s http://127.0.0.1:57860/sdapi/v1/options >/dev/null 2>&1; then echo "✓ WebUI 已就绪" break fi sleep 2 if [ $i -eq 60 ]; then echo "⚠ WebUI 60 秒内未就绪,请检查日志: tail -f $BASE_DIR/logs/webui.log" fi done