#!/bin/bash # OpenClaw Ollama Toolcall Proxy - macOS LaunchAgent 安装脚本 # 将服务配置为开机自动启动 set -e # 配置 PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)" SERVICE_NAME="com.openclaw.ollama-proxy" PLIST_PATH="$HOME/Library/LaunchAgents/${SERVICE_NAME}.plist" LOG_DIR="$HOME/Library/Logs/OpenClawOllamaProxy" # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color echo -e "${GREEN}=== OpenClaw Ollama Proxy LaunchAgent 安装 ===${NC}" echo "" # 检查 Node.js if ! command -v node &> /dev/null; then echo -e "${RED}错误: 未找到 Node.js,请先安装 Node.js${NC}" exit 1 fi # 获取 node 和 npx 的完整路径 NODE_PATH="$(which node)" NPX_PATH="$(which npx)" echo -e "${YELLOW}项目目录:${NC} $PROJECT_DIR" echo -e "${YELLOW}Node 路径:${NC} $NODE_PATH" echo -e "${YELLOW}NPX 路径:${NC} $NPX_PATH" echo "" # 创建日志目录 mkdir -p "$LOG_DIR" echo -e "${GREEN}✓${NC} 创建日志目录: $LOG_DIR" # 构建 plist 文件 cat > "$PLIST_PATH" << EOF Label ${SERVICE_NAME} ProgramArguments ${NPX_PATH} tsx ${PROJECT_DIR}/src/index.ts WorkingDirectory ${PROJECT_DIR} RunAtLoad KeepAlive StandardOutPath ${LOG_DIR}/stdout.log StandardErrorPath ${LOG_DIR}/stderr.log EnvironmentVariables PATH /opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin EOF echo -e "${GREEN}✓${NC} 生成 plist: $PLIST_PATH" # 卸载旧服务(如果存在) if launchctl list "$SERVICE_NAME" &> /dev/null; then launchctl bootout gui/$(id -u) "$PLIST_PATH" 2>/dev/null || true echo -e "${GREEN}✓${NC} 卸载旧服务" fi # 加载新服务 launchctl bootstrap gui/$(id -u) "$PLIST_PATH" echo -e "${GREEN}✓${NC} 加载新服务" # 等待服务启动 sleep 1 # 检查服务状态 if launchctl list "$SERVICE_NAME" &> /dev/null; then echo "" echo -e "${GREEN}=== 安装成功 ===${NC}" echo "" echo "服务名称: $SERVICE_NAME" echo "监听地址: http://0.0.0.0:11435" echo "日志目录: $LOG_DIR" echo "" echo "常用命令:" echo " 查看状态: launchctl list $SERVICE_NAME" echo " 停止服务: launchctl bootout gui/\$(id -u) $PLIST_PATH" echo " 启动服务: launchctl bootstrap gui/\$(id -u) $PLIST_PATH" echo " 查看日志: tail -f $LOG_DIR/stdout.log" else echo -e "${RED}服务启动失败,请检查日志: $LOG_DIR/stderr.log${NC}" exit 1 fi