killserver.sh 1.6 KB

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