#!/usr/bin/env bash # # ComfyUI LaunchD 服务配置脚本 # 实现开机自启和后台运行 # set -e RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' log_info() { echo -e "${GREEN}[INFO]${NC} $1"; } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } log_error() { echo -e "${RED}[ERROR]${NC} $1"; } # 配置 COMFYUI_DIR="${HOME}/ComfyUI" PLIST_NAME="com.comfyui.service" PLIST_PATH="${HOME}/Library/LaunchAgents/${PLIST_NAME}.plist" LOG_DIR="${HOME}/Library/Logs/ComfyUI" # 检查 ComfyUI 是否已安装 check_installation() { if [[ ! -d "$COMFYUI_DIR" ]]; then log_error "ComfyUI 未安装,请先运行 install_comfyui_m2ultra.sh" exit 1 fi if [[ ! -f "${COMFYUI_DIR}/run_comfyui.sh" ]]; then log_error "启动脚本不存在: ${COMFYUI_DIR}/run_comfyui.sh" exit 1 fi } # 创建日志目录 create_log_dir() { log_info "创建日志目录..." mkdir -p "$LOG_DIR" } # 创建 LaunchAgent plist create_plist() { log_info "创建 LaunchAgent 配置..." cat > "$PLIST_PATH" << EOF Label ${PLIST_NAME} ProgramArguments ${COMFYUI_DIR}/run_comfyui.sh RunAtLoad KeepAlive SuccessfulExit StandardOutPath ${LOG_DIR}/comfyui.log StandardErrorPath ${LOG_DIR}/comfyui.error.log WorkingDirectory ${COMFYUI_DIR} EnvironmentVariables PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:${HOME}/miniforge3/bin ProcessType Interactive Nice -10 EOF log_info "LaunchAgent 配置已创建: $PLIST_PATH" } # 加载服务 load_service() { log_info "加载 LaunchAgent 服务..." # 卸载旧服务(如果存在) if launchctl list | grep -q "$PLIST_NAME"; then log_warn "检测到已运行的服务,正在卸载..." launchctl unload "$PLIST_PATH" 2>/dev/null || true fi # 加载新服务 launchctl load "$PLIST_PATH" sleep 2 # 验证服务状态 if launchctl list | grep -q "$PLIST_NAME"; then log_info "✅ 服务已成功启动" else log_error "❌ 服务启动失败" exit 1 fi } # 显示服务状态 show_status() { echo echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "📊 ComfyUI 服务状态" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo echo "服务名称: $PLIST_NAME" echo "配置文件: $PLIST_PATH" echo "日志目录: $LOG_DIR" echo echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "🔧 管理命令:" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo echo "启动服务: launchctl load $PLIST_PATH" echo "停止服务: launchctl unload $PLIST_PATH" echo "查看状态: launchctl list | grep comfyui" echo "查看日志: tail -f ${LOG_DIR}/comfyui.log" echo "查看错误: tail -f ${LOG_DIR}/comfyui.error.log" echo echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "🌐 访问地址:" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo echo "本地访问: http://127.0.0.1:8188" echo "内网访问: http://$(ipconfig getifaddr en0 2>/dev/null || echo "获取失败"):8188" echo echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" } # 卸载服务 uninstall_service() { log_warn "卸载 ComfyUI 服务..." if [[ -f "$PLIST_PATH" ]]; then launchctl unload "$PLIST_PATH" 2>/dev/null || true rm "$PLIST_PATH" log_info "服务已卸载" else log_warn "服务配置不存在" fi } # 主流程 main() { case "${1:-install}" in install) echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "ComfyUI LaunchD 服务配置" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo check_installation create_log_dir create_plist load_service show_status ;; uninstall) uninstall_service ;; *) echo "用法: $0 {install|uninstall}" exit 1 ;; esac } main "$@"