stop.sh 702 B

1234567891011121314151617181920212223242526272829
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
  4. PID_FILE="$PROJECT_DIR/runtime/service.pid"
  5. if [[ ! -f "$PID_FILE" ]]; then
  6. echo "Service is not running (PID file not found)."
  7. exit 0
  8. fi
  9. SERVICE_PID="$(tr -dc '0-9' < "$PID_FILE")"
  10. if [[ -z "$SERVICE_PID" ]] || ! kill -0 "$SERVICE_PID" 2>/dev/null; then
  11. rm -f "$PID_FILE"
  12. echo "Service is not running; stale PID file removed."
  13. exit 0
  14. fi
  15. kill "$SERVICE_PID"
  16. for _ in {1..20}; do
  17. if ! kill -0 "$SERVICE_PID" 2>/dev/null; then
  18. rm -f "$PID_FILE"
  19. echo "Service stopped."
  20. exit 0
  21. fi
  22. sleep 0.5
  23. done
  24. echo "Service did not stop within 10 seconds (PID $SERVICE_PID)." >&2
  25. exit 1