start.sh 2.01 KB
#!/usr/bin/env bash
# 起 Raylight 生产服务:常驻 ComfyUI(4卡FSDP集群)+ raylight-server.py(对外契约跟旧 gateway.py
# 一致,见 notes.md)。已经在跑的会先停掉。
#
# 停端口要按端口找 PID,不要用 pkill -f——同理 minimax-h3/start-all.sh 里的教训。
set -uo pipefail
cd /data/models/raylight

COMFY_PORT=8188
SERVER_PORT="${PORT:-8100}"

for PORT in $COMFY_PORT $SERVER_PORT; do
  PID=$(ss -lptn "sport = :$PORT" | grep -o "pid=[0-9]*" | cut -d= -f2 | sort -u)
  [ -n "$PID" ] && { echo "停 $PORT (PID $PID)"; kill $PID; }
done
sleep 3

cd ComfyUI
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
# ponytail: 保留最近10轮日志(.1最新~.10最旧)——2026-08-23密集测试期间发现只留1份不够用,
# 连续崩溃重启会把上上轮的崩溃现场覆盖掉,排查不了;10轮之前的还是不留,不做完整logrotate
for i in 9 8 7 6 5 4 3 2 1; do
  [ -f "/data/models/raylight/comfyui-server.log.$i" ] && \
    mv -f "/data/models/raylight/comfyui-server.log.$i" "/data/models/raylight/comfyui-server.log.$((i+1))"
done
mv -f /data/models/raylight/comfyui-server.log /data/models/raylight/comfyui-server.log.1 2>/dev/null
setsid nohup .venv/bin/python main.py --listen 0.0.0.0 --port "$COMFY_PORT" \
  > /data/models/raylight/comfyui-server.log 2>&1 < /dev/null &
disown
cd ..

echo "等 ComfyUI 起来"
for i in $(seq 1 30); do
  sleep 3
  CODE=$(curl -s --max-time 3 -o /dev/null -w '%{http_code}' "http://127.0.0.1:$COMFY_PORT/system_stats")
  [ "$CODE" = "200" ] && { echo "  ComfyUI ready"; break; }
done

setsid nohup ComfyUI/.venv/bin/python -m uvicorn server:app --host 0.0.0.0 --port "$SERVER_PORT" \
  > /data/models/raylight/server.log 2>&1 < /dev/null &
disown

echo "等 raylight-server 起来"
for i in $(seq 1 20); do
  sleep 2
  CODE=$(curl -s --max-time 3 -o /dev/null -w '%{http_code}' "http://127.0.0.1:$SERVER_PORT/health")
  [ "$CODE" = "200" ] && { echo "  raylight-server ready"; break; }
done
curl -s "http://127.0.0.1:$SERVER_PORT/health"; echo