Files
macos-tools/stable-diffusion/setup_launchd.sh
bruno 435834dc79 feat: Harbor 版本化配置
- 添加 Harbor 快速恢复脚本 (harbor-quick-restore.sh)
- 添加完整恢复指南 (HARBOR-RESTORE-GUIDE.md)
- 添加版本信息文件 (VERSION.md)
- 更新 .gitignore 排除敏感数据
- 配置 harbor git remote
- 修复 Cloudflare Tunnel 配置

系统重装后可通过以下命令快速恢复:
git clone http://192.168.1.83:33000/gao/ljwx-harbor.git
cd ljwx-harbor
./harbor-quick-restore.sh
2026-02-27 08:12:30 +08:00

188 lines
5.7 KiB
Bash
Executable File

#!/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
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>${PLIST_NAME}</string>
<key>ProgramArguments</key>
<array>
<string>${COMFYUI_DIR}/run_comfyui.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<false/>
</dict>
<key>StandardOutPath</key>
<string>${LOG_DIR}/comfyui.log</string>
<key>StandardErrorPath</key>
<string>${LOG_DIR}/comfyui.error.log</string>
<key>WorkingDirectory</key>
<string>${COMFYUI_DIR}</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:${HOME}/miniforge3/bin</string>
</dict>
<key>ProcessType</key>
<string>Interactive</string>
<key>Nice</key>
<integer>-10</integer>
</dict>
</plist>
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 "$@"