killserver.sh 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  4. cd "$SCRIPT_DIR"
  5. PID_FILE="server.pid"
  6. PORT="${MCP_PORT:-8501}"
  7. echo "[killserver] Checking for running virtuoso_mcp instances..."
  8. if [[ -f "$PID_FILE" ]]; then
  9. PID="$(cat "$PID_FILE" 2>/dev/null || true)"
  10. if [[ -n "${PID:-}" ]] && kill -0 "$PID" 2>/dev/null; then
  11. echo "[killserver] Stopping PID from pidfile: $PID"
  12. kill "$PID" || true
  13. sleep 0.5
  14. if kill -0 "$PID" 2>/dev/null; then
  15. echo "[killserver] PID $PID still alive, sending SIGKILL"
  16. kill -9 "$PID" || true
  17. fi
  18. else
  19. echo "[killserver] Stale or empty pidfile, removing."
  20. fi
  21. rm -f "$PID_FILE"
  22. fi
  23. STRAY_PIDS="$(ps -ef | grep -E 'uvicorn[[:space:]]+virtuoso_mcp:app' | grep -v grep | awk '{print $2}' || true)"
  24. if [[ -n "${STRAY_PIDS:-}" ]]; then
  25. echo "[killserver] Killing stray uvicorn PIDs: $STRAY_PIDS"
  26. for p in $STRAY_PIDS; do
  27. kill "$p" || true
  28. done
  29. sleep 0.5
  30. for p in $STRAY_PIDS; do
  31. if kill -0 "$p" 2>/dev/null; then
  32. kill -9 "$p" || true
  33. fi
  34. done
  35. fi
  36. if command -v lsof >/dev/null 2>&1; then
  37. PORT_PIDS="$(lsof -ti tcp:"$PORT" || true)"
  38. if [[ -n "${PORT_PIDS:-}" ]]; then
  39. echo "[killserver] Port $PORT still in use by: $PORT_PIDS"
  40. for p in $PORT_PIDS; do
  41. kill "$p" || true
  42. done
  43. sleep 0.5
  44. for p in $PORT_PIDS; do
  45. if kill -0 "$p" 2>/dev/null; then
  46. kill -9 "$p" || true
  47. fi
  48. done
  49. fi
  50. fi
  51. echo "[killserver] Done."