start.sh 997 B

123456789101112131415161718192021222324252627282930313233
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
  4. VENV_PYTHON="$PROJECT_DIR/.venv/bin/python"
  5. PID_FILE="$PROJECT_DIR/runtime/service.pid"
  6. LOG_FILE="$PROJECT_DIR/logs/service.log"
  7. if [[ ! -x "$VENV_PYTHON" ]]; then
  8. echo "Python environment missing. Run ./scripts/setup.sh first." >&2
  9. exit 1
  10. fi
  11. if [[ -f "$PID_FILE" ]]; then
  12. EXISTING_PID="$(tr -dc '0-9' < "$PID_FILE")"
  13. if [[ -n "$EXISTING_PID" ]] && kill -0 "$EXISTING_PID" 2>/dev/null; then
  14. echo "Service already running (PID $EXISTING_PID)."
  15. exit 0
  16. fi
  17. fi
  18. mkdir -p "$PROJECT_DIR/runtime" "$PROJECT_DIR/logs"
  19. cd "$PROJECT_DIR"
  20. "$VENV_PYTHON" -m data_query_agent --check-config
  21. nohup "$VENV_PYTHON" -m data_query_agent >>"$LOG_FILE" 2>&1 &
  22. SERVICE_PID=$!
  23. printf '%s\n' "$SERVICE_PID" > "$PID_FILE"
  24. sleep 1
  25. if ! kill -0 "$SERVICE_PID" 2>/dev/null; then
  26. echo "Service failed to start. Check $LOG_FILE" >&2
  27. exit 1
  28. fi
  29. echo "Service started (PID $SERVICE_PID). Log: $LOG_FILE"