#!/bin/bash # /opt/sd-launch.sh # 复制你手动运行时的完整环境变量 export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib:/opt/lib:/soc/lib:$LD_LIBRARY_PATH export PYTHONPATH=$PYTHONPATH export DISPLAY=:0 # 等待系统完全启动 sleep 15 # 日志目录 LOG_DIR="/var/log/sd-launch" mkdir -p "$LOG_DIR" echo "Starting SD services at $(date)" >> "$LOG_DIR/startup.log" # 1. 启动后端 cd /root/Desktop/SD1.5-AX650-Dark_Sushi_Mix echo "Starting backend..." >> "$LOG_DIR/startup.log" # 直接用 uvicorn 而不是 nohup,让脚本保持运行 uvicorn api_10steps:app --host 0.0.0.0 --port 7888 > "$LOG_DIR/backend.log" 2>&1 & BACKEND_PID=$! echo $BACKEND_PID > "$LOG_DIR/backend.pid" # 等待后端启动 sleep 10 if ! kill -0 $BACKEND_PID 2>/dev/null; then echo "Backend failed to start" >> "$LOG_DIR/startup.log" exit 1 fi # 2. 启动前端 cd /root/Desktop/SD1.5-AX650-Dark_Sushi_Mix/client echo "Starting frontend..." >> "$LOG_DIR/startup.log" python3 app.py > "$LOG_DIR/frontend.log" 2>&1 & FRONTEND_PID=$! echo $FRONTEND_PID > "$LOG_DIR/frontend.pid" # 3. 等待前端端口就绪 echo "Waiting for frontend..." >> "$LOG_DIR/startup.log" for i in {1..30}; do if curl -s http://localhost:5000/ >/dev/null 2>&1; then break fi sleep 2 done # 4. 打开浏览器并全屏 echo "Opening browser..." >> "$LOG_DIR/startup.log" # 等待图形界面完全就绪 sleep 5 # 确保 DISPLAY 正确设置 export DISPLAY=:0 echo "DISPLAY=$DISPLAY" >> "$LOG_DIR/startup.log" echo "Current user: $(whoami)" >> "$LOG_DIR/startup.log" # 直接使用 Firefox kiosk 模式 if command -v firefox >/dev/null 2>&1; then echo "Starting Firefox in kiosk mode..." >> "$LOG_DIR/startup.log" firefox --kiosk http://localhost:5000/ >> "$LOG_DIR/browser.log" 2>&1 & BROWSER_PID=$! echo "Firefox started with PID: $BROWSER_PID" >> "$LOG_DIR/startup.log" # 验证浏览器进程是否启动成功 sleep 3 if kill -0 $BROWSER_PID 2>/dev/null; then echo "Firefox process confirmed running" >> "$LOG_DIR/startup.log" else echo "Firefox process failed to start" >> "$LOG_DIR/startup.log" cat "$LOG_DIR/browser.log" >> "$LOG_DIR/startup.log" fi else echo "Firefox not found" >> "$LOG_DIR/startup.log" fi