82 lines
1.6 KiB
Bash
Executable File
82 lines
1.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
VENV_PYTHON="$ROOT_DIR/.venv/bin/python"
|
|
PID_FILE="$ROOT_DIR/data/runtime/server.pid"
|
|
LOG_FILE="$ROOT_DIR/data/runtime/server.log"
|
|
HOST="${HOST:-127.0.0.1}"
|
|
PORT="${PORT:-8000}"
|
|
|
|
mkdir -p "$ROOT_DIR/data/runtime"
|
|
|
|
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+${LD_LIBRARY_PATH}:}$ROOT_DIR/.venv/lib/python3.13/site-packages/llama_cpp/lib"
|
|
export GGML_VULKAN=1
|
|
|
|
is_running() {
|
|
if [[ -f "$PID_FILE" ]]; then
|
|
local pid
|
|
pid="$(cat "$PID_FILE")"
|
|
if kill -0 "$pid" >/dev/null 2>&1; then
|
|
return 0
|
|
fi
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
start_server() {
|
|
if is_running; then
|
|
echo "Server already running with PID $(cat "$PID_FILE")"
|
|
exit 0
|
|
fi
|
|
nohup "$VENV_PYTHON" -m uvicorn main:app --host "$HOST" --port "$PORT" >"$LOG_FILE" 2>&1 &
|
|
echo $! >"$PID_FILE"
|
|
echo "Started server on http://$HOST:$PORT with PID $(cat "$PID_FILE")"
|
|
echo "Log: $LOG_FILE"
|
|
}
|
|
|
|
stop_server() {
|
|
if ! is_running; then
|
|
echo "Server is not running"
|
|
rm -f "$PID_FILE"
|
|
exit 0
|
|
fi
|
|
local pid
|
|
pid="$(cat "$PID_FILE")"
|
|
kill "$pid"
|
|
rm -f "$PID_FILE"
|
|
echo "Stopped server PID $pid"
|
|
}
|
|
|
|
status_server() {
|
|
if is_running; then
|
|
echo "Server is running with PID $(cat "$PID_FILE") on http://$HOST:$PORT"
|
|
else
|
|
echo "Server is not running"
|
|
fi
|
|
}
|
|
|
|
case "${1:-}" in
|
|
start)
|
|
start_server
|
|
;;
|
|
stop)
|
|
stop_server
|
|
;;
|
|
restart)
|
|
stop_server || true
|
|
start_server
|
|
;;
|
|
status)
|
|
status_server
|
|
;;
|
|
logs)
|
|
touch "$LOG_FILE"
|
|
tail -n 50 -f "$LOG_FILE"
|
|
;;
|
|
*)
|
|
echo "Usage: $0 {start|stop|restart|status|logs}"
|
|
exit 1
|
|
;;
|
|
esac
|