#!/usr/bin/env bash # stop_comfyui.sh — Graceful ComfyUI shutdown (T3, spec §1.3 stop contract). # # Donor mirror: SIGTERM -> 10s grace -> SIGKILL -> port-pattern pkill # fallback -> port-free verify (incl. the legacy-PID-file warning from # the donor WI-CC cross-port-kill incident). # # Input env vars: # E2E_COMFYUI_ROOT — (required) path to the E2E environment # PORT — ComfyUI port (default: 8189) # # Exit: 0=stopped, 1=failed set -euo pipefail PORT="${PORT:-8189}" GRACE_PERIOD=10 log() { echo "[stop_comfyui] $*"; } err() { echo "[stop_comfyui] ERROR: $*" >&2; } die() { err "$@"; exit 1; } [[ -n "${E2E_COMFYUI_ROOT:-}" ]] || die "E2E_COMFYUI_ROOT is not set" PID_FILE="$E2E_COMFYUI_ROOT/logs/comfyui.${PORT}.pid" LEGACY_PID_FILE="$E2E_COMFYUI_ROOT/logs/comfyui.pid" if [[ -f "$LEGACY_PID_FILE" ]] && [[ ! -f "$PID_FILE" ]]; then log "WARN: found legacy unported PID file $LEGACY_PID_FILE but no ${PID_FILE}. Cross-port risk — ignoring legacy file." fi COMFYUI_PID="" if [[ -f "$PID_FILE" ]]; then COMFYUI_PID="$(cat "$PID_FILE")" log "Read PID=$COMFYUI_PID from $PID_FILE" fi if [[ -n "$COMFYUI_PID" ]] && kill -0 "$COMFYUI_PID" 2>/dev/null; then log "Sending SIGTERM to PID $COMFYUI_PID..." kill "$COMFYUI_PID" 2>/dev/null || true elapsed=0 while kill -0 "$COMFYUI_PID" 2>/dev/null && [[ "$elapsed" -lt "$GRACE_PERIOD" ]]; do sleep 1 elapsed=$((elapsed + 1)) done if kill -0 "$COMFYUI_PID" 2>/dev/null; then log "Process still alive after ${GRACE_PERIOD}s. Sending SIGKILL..." kill -9 "$COMFYUI_PID" 2>/dev/null || true sleep 1 fi fi # Fallback: kill by port pattern (covers Manager-restarted processes whose # PID differs from the recorded one). if ss -tlnp 2>/dev/null | grep -q ":${PORT}\b"; then log "Port $PORT still in use. Attempting pkill fallback..." pkill -f "main\\.py.*--port $PORT" 2>/dev/null || true sleep 2 if ss -tlnp 2>/dev/null | grep -q ":${PORT}\b"; then pkill -9 -f "main\\.py.*--port $PORT" 2>/dev/null || true sleep 1 fi fi rm -f "$PID_FILE" if ss -tlnp 2>/dev/null | grep -q ":${PORT}\b"; then die "Port $PORT is still in use after shutdown" fi log "ComfyUI stopped."