#!/bin/bash # Debug Port Cleanup Script # Stellt sicher, dass die Debug-Ports frei sind und beendet laufende Prozesse set -euo pipefail PORTS=("3000" "3001" "9229" "5173" "9222") echo "🧹 Prüfe und bereinige Debug-Ports (${PORTS[*]})..." have_lsof=false have_fuser=false have_ss=false command -v lsof >/dev/null 2>&1 && have_lsof=true command -v fuser >/dev/null 2>&1 && have_fuser=true command -v ss >/dev/null 2>&1 && have_ss=true if [ "$have_lsof" = false ] && [ "$have_fuser" = false ] && [ "$have_ss" = false ]; then echo "⚠️ Weder lsof noch fuser/ss verfügbar. Ports können nicht geprüft/gekilled werden." exit 0 fi for PORT in "${PORTS[@]}"; do PIDS="" if [ "$have_lsof" = true ]; then PIDS=$({ lsof -ti :"$PORT" 2>/dev/null || true; } | tr '\n' ' ') elif [ "$have_fuser" = true ]; then # fuser listet PIDs, -n tcp beschränkt auf TCP PIDS=$({ fuser -n tcp "$PORT" 2>/dev/null || true; } | tr '\n' ' ') elif [ "$have_ss" = true ]; then # ss fallback, extrahiere pid=... aus der letzten Spalte PIDS=$({ ss -ltnp "sport = :$PORT" 2>/dev/null || true; } | awk 'NR>1 {split($NF,pid,"pid="); split(pid[2],p,","); if(p[1]!=""){print p[1]}}' | tr '\n' ' ') fi if [ -n "$PIDS" ]; then echo " ✓ Beende Prozesse auf Port $PORT (PID: $PIDS)" if [ "$have_fuser" = true ]; then fuser -k -n tcp "$PORT" 2>/dev/null || true else kill -9 $PIDS 2>/dev/null || true fi else echo " ○ Port $PORT ist frei" fi done echo "✅ Port-Bereinigung abgeschlossen." echo "" echo "Belegte Debug-Ports aktuell:" if [ "$have_lsof" = true ]; then lsof -i :3000 -i :3001 -i :9229 -i :5173 -i :9222 2>/dev/null || echo " Alle Debug-Ports sind frei ✓" elif [ "$have_ss" = true ]; then ss -ltnp "( sport = :3000 or sport = :3001 or sport = :9229 or sport = :5173 or sport = :9222 )" 2>/dev/null || echo " Alle Debug-Ports sind frei ✓" else echo " Port-Status nicht prüfbar (lsof/ss fehlen), Cleanup wurde dennoch ausgeführt." fi