#!/bin/sh APP="$(cd "$(dirname "$0")" && pwd)" GUNICORN="$APP/backend/.venv/bin/gunicorn" if [ -f "$APP/app.pid" ]; then kill "$(cat "$APP/app.pid")" 2>/dev/null && echo "stopped $(cat "$APP/app.pid")" rm -f "$APP/app.pid" fi # The master's workers do not always go with it, and a surviving worker keeps # :8123 bound — which looks exactly like a healthy start that serves nothing. i=0 while [ $i -lt 15 ]; do pgrep -f "$GUNICORN" >/dev/null 2>&1 || exit 0 sleep 1 i=$((i + 1)) done pkill -9 -f "$GUNICORN" 2>/dev/null echo "force-stopped leftover workers"