Files
asf/scripts/stop-stack.sh
T
2026-09-08 07:21:34 -04:00

64 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# stop-stack.sh — ferma i processi avviati da start-stack.sh.
# Legge i PIDs da var/run/asf-stack.pids, oppure cerca per pattern.
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
PID_FILE="$ROOT_DIR/var/run/asf-stack.pids"
echo "ASF stack STOP $(date '+%F %T %Z')"
echo
stop_group() {
local pid="$1" name="$2"
if ! kill -0 "$pid" 2>/dev/null; then
echo " ✗ $name (pid=$pid) già spento"
return 0
fi
echo -n " ⏹ $name pid=$pid → "
kill -TERM "$pid" 2>/dev/null || true
local w=0
while [ $w -lt 8 ]; do
kill -0 "$pid" 2>/dev/null || break
sleep 1; w=$((w+1))
done
if kill -0 "$pid" 2>/dev/null; then
echo -n "SIGKILL "
kill -9 "$pid" 2>/dev/null || true
sleep 1
fi
kill -0 "$pid" 2>/dev/null && echo "FAIL (ancora vivo)" || echo "ok"
}
stop_patterns() {
echo "[fallback] kill via pattern match…"
for pattern in \
"uvicorn app.main:app" \
"next dev" "next-server" \
"python -m app.worker" "asf-worker.*run_worker"; do
pids=$(pgrep -af "$pattern" 2>/dev/null | awk '{print $1}' || true)
[ -z "$pids" ] && continue
echo " pattern '$pattern' → pids=$pids"
for p in $pids; do stop_group "$p" "$pattern"; done
done
}
if [ -f "$PID_FILE" ]; then
echo "[from pidfile] $PID_FILE"
while IFS=' ' read -r name pid rest; do
[ -z "${name:-}" ] && continue
[ -z "${pid:-}" ] && continue
stop_group "$pid" "$name"
done < "$PID_FILE"
rm -f "$PID_FILE"
else
echo "[no pidfile $PID_FILE]"
stop_patterns
fi
# final sweep
echo
echo "ports still listening:"
ss -ltnp 2>/dev/null | grep -E ":(8000|3000) " || echo " → nessuna porta 8000 / 3000 usata (ok)."
echo "done."