From e1da269c084b0cfe5858c5a1a38663df6b1df9cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9=20=D0=9C=D0=B0?= =?UTF-8?q?=D0=BC=D0=B5=D0=B4=D0=BE=D0=B2?= Date: Wed, 10 Jun 2026 17:51:09 +0300 Subject: [PATCH] fix find_free_port: single ss call, grep for :PORT pattern --- install.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/install.sh b/install.sh index d73c897..4ea87df 100644 --- a/install.sh +++ b/install.sh @@ -18,12 +18,12 @@ step() { echo -e "\n${CYAN}━━━ $1 ━━━${NC}"; } mark_done() { echo "$1" >> "$PROGRESS_FILE"; } is_done() { grep -qx "$1" "$PROGRESS_FILE" 2>/dev/null; } -# ─── Find free port (check + increment until free) ────────────── +# ─── Find free port (check via ss, single pass) ──────────────── find_free_port() { local port=$1 max=$2 max="${max:-65535}" while [ "$port" -le "$max" ]; do - if ! ss -tlnp "sport = :$port" 2>/dev/null | grep -q .; then + if ! ss -tlnp 2>/dev/null | grep -q ":$port "; then echo "$port" return 0 fi @@ -213,7 +213,7 @@ for pair in "POSTGRES_PORT:5432" "REDIS_PORT:6379" "RABBITMQ_PORT:5672" "RABBITM current=$(grep "^${var}=" "$INSTALL_DIR/.env" 2>/dev/null | cut -d= -f2) || true current="${current:-$default}" - if ss -tlnp "sport = :$current" 2>/dev/null | grep -q .; then + if ss -tlnp 2>/dev/null | grep -q ":$current "; then warn "Port $current ($var) is busy — finding free port..." new_port=$(find_free_port "$((current + 1))" 2>/dev/null) || new_port=$((current + 100)) set_env "$var" "$new_port"