# launchd > macOS 原生服务管理器,用于管理系统级和用户级守护进程(daemons)和代理(agents)。 ## Overview launchd 是 macOS 的核心初始化系统和服务管理器,替代了传统的 Unix init (SysV)、BSD rc 和 xinetd。它负责在系统启动时启动系统级服务,并在用户登录时启动用户级服务。 ## Key Concepts - **Daemon(守护进程)**:系统级后台服务,在系统启动时运行,无需用户登录 - **Agent(代理)**:用户级后台服务,随用户登录启动 - **LaunchAgent**:用户级代理,存放在 `~/Library/LaunchAgents/` - **LaunchDaemon**:系统级守护进程,存放在 `/Library/LaunchDaemons/` - **plist 文件**:Property List 格式的配置文件,定义服务参数 ## launchctl Commands ```bash # 加载服务(启动) launchctl load ~/Library/LaunchAgents/com.frpc.client.plist # 卸载服务(停止) launchctl unload ~/Library/LaunchAgents/com.frpc.client.plist # 启动服务 launchctl start com.frpc.client # 停止服务 launchctl stop com.frpc.client # 列出所有已加载的服务 launchctl list # 查看服务状态 launchctl print gui/$UID/com.frpc.client ``` ## plist Configuration Example ```xml Label com.frpc.client ProgramArguments /opt/frp/frp_0.65.0_darwin_arm64/frpc -c /opt/frp/frp_0.65.0_darwin_arm64/frpc.toml RunAtLoad KeepAlive StandardOutPath /opt/frp/frp_0.65.0_darwin_arm64/frpc.log StandardErrorPath /opt/frp/frp_0.65.0_darwin_arm64/frpc.error.log ``` ## Key Properties | 属性 | 说明 | |------|------| | Label | 唯一标识符 | | ProgramArguments | 要执行的命令及参数数组 | | RunAtLoad | 是否在加载时立即启动 | | KeepAlive | 是否保持持续运行(崩溃后自动重启)| | StandardOutPath | 标准输出日志路径 | | StandardErrorPath | 错误输出日志路径 | | WorkingDirectory | 工作目录 | ## Comparison with Other Service Managers | 特性 | launchd | systemd (Linux) | tmux | nohup | |------|---------|-----------------|------|-------| | 系统级服务 | ✅ | ✅ | ❌ | ❌ | | 用户级服务 | ✅ | ✅ | ❌ | ❌ | | 开机自启 | ✅ | ✅ | ❌ | ❌ | | 持久会话 | ❌ | ❌ | ✅ | ❌ | | 简单后台 | ❌ | ❌ | ❌ | ✅ | | 崩溃重启 | ✅ | ✅ | ❌ | ❌ | ## Use Cases in Home Server - **FRP 客户端**:开机自启的内网穿透服务 - **N8n**:自动化工作流服务 - **OpenClaw**:AI Agent 服务 - **Home Assistant**:智能家居控制中心 ## Best Practices 1. **使用 LaunchAgents**(而非 LaunchDaemons):用户级代理更安全,权限更少 2. **配置 KeepAlive**:确保服务崩溃后自动重启 3. **设置日志路径**:便于故障排查 4. **使用软链接版本路径**:便于升级时不修改 plist 5. **定期检查服务状态**:确保服务正常运行 ## Related Concepts - [[frp]] — 内网穿透工具,常用 launchd 管理 - [[Gatekeeper]] — macOS 安全机制 - [[Mac Mini M4]] — 常使用 launchd 管理 Home Server 服务 ## References - Apple Developer Documentation: Daemons and Services - `man launchd.plist` - `man launchctl`