Files
2026-07-12 14:54:03 +08:00

90 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
UNIT_NAME="agent-knowledge-atlas.service"
UNIT_SOURCE="$ROOT/web/$UNIT_NAME"
UNIT_TARGET="$HOME/.config/systemd/user/$UNIT_NAME"
ENV_FILE="$ROOT/web/cache/service.env"
HOST="${HOST:-100.114.68.27}"
PORT="${PORT:-18080}"
HEALTH_URL="${HEALTH_URL:-http://$HOST:$PORT/api/health}"
write_environment() {
mkdir -p "$(dirname "$ENV_FILE")"
{
printf 'HOST=%s\n' "$HOST"
printf 'PORT=%s\n' "$PORT"
printf 'OLLAMA_URL=%s\n' "${OLLAMA_URL:-http://192.168.1.10:11434}"
printf 'OLLAMA_MODEL_LIGHT=%s\n' "${OLLAMA_MODEL_LIGHT:-ChatGPT-5.6:Luna}"
printf 'OLLAMA_MODEL_FAST=%s\n' "${OLLAMA_MODEL_FAST:-ChatGPT-5.6:Terra}"
printf 'OLLAMA_MODEL_LARGE=%s\n' "${OLLAMA_MODEL_LARGE:-ChatGPT-5.6:Sol}"
} >"$ENV_FILE"
}
install_unit() {
mkdir -p "$(dirname "$UNIT_TARGET")"
ln -sfn "$UNIT_SOURCE" "$UNIT_TARGET"
write_environment
systemctl --user daemon-reload
}
wait_for_health() {
for _ in $(seq 1 30); do
if curl -fsS --max-time 2 "$HEALTH_URL" >/dev/null 2>&1; then
return 0
fi
sleep 0.5
done
return 1
}
start_server() {
install_unit
systemctl --user enable --now "$UNIT_NAME"
if ! wait_for_health; then
echo "Server did not become healthy" >&2
journalctl --user -u "$UNIT_NAME" -n 60 --no-pager >&2 || true
return 1
fi
echo "Agent Knowledge Atlas started"
echo "Health: $HEALTH_URL"
}
stop_server() {
if systemctl --user is-active --quiet "$UNIT_NAME"; then
systemctl --user stop "$UNIT_NAME"
echo "Agent Knowledge Atlas stopped"
else
echo "Agent Knowledge Atlas is not running"
fi
}
status_server() {
systemctl --user is-active "$UNIT_NAME"
curl -fsS --max-time 5 "$HEALTH_URL"
echo
}
case "${1:-status}" in
install)
install_unit
systemctl --user enable "$UNIT_NAME"
echo "Installed $UNIT_NAME"
;;
start) start_server ;;
stop) stop_server ;;
restart)
install_unit
systemctl --user restart "$UNIT_NAME"
wait_for_health
echo "Agent Knowledge Atlas restarted"
;;
status) status_server ;;
logs) journalctl --user -u "$UNIT_NAME" -n "${LINES:-80}" --no-pager ;;
*)
echo "Usage: $0 {install|start|stop|restart|status|logs}" >&2
exit 2
;;
esac