#!/usr/bin/env bash # Uvicorn launcher: SAC_UVICORN_WORKERS из sac-api.env (без systemd EnvironmentFile). set -euo pipefail APP_ROOT="${SAC_APP_ROOT:-/opt/security-alert-center}" CONFIG_FILE="${SAC_CONFIG_FILE:-${APP_ROOT}/config/sac-api.env}" VENV="${APP_ROOT}/backend/.venv" HOST="127.0.0.1" PORT="8000" WORKERS=4 _read_env_int() { local key="$1" default="$2" line val [ -f "$CONFIG_FILE" ] || { printf '%s\n' "$default" return 0 } line="$(grep -E "^[[:space:]]*${key}=" "$CONFIG_FILE" 2>/dev/null | tail -1)" || { printf '%s\n' "$default" return 0 } val="${line#*=}" val="${val#"${val%%[![:space:]]*}"}" val="${val%"${val##*[![:space:]]}"}" val="${val#\"}" val="${val%\"}" val="${val#\'}" val="${val%\'}" if [[ "$val" =~ ^[0-9]+$ ]] && [ "$val" -ge 1 ]; then printf '%s\n' "$val" else printf '%s\n' "$default" fi } WORKERS="$(_read_env_int SAC_UVICORN_WORKERS 4)" exec "${VENV}/bin/uvicorn" app.main:app \ --host "$HOST" \ --port "$PORT" \ --workers "$WORKERS" \ --timeout-graceful-shutdown 30