
把 Mac mini 当作一台 7x24 小时待命的个人助理节点是我最近折腾 OpenClaw 过程中收获最大的一件事。OpenClaw 这类常驻式 AI 助手最怕的并不是运行在性能不够的机器上而是运行过程中被系统悄悄按下暂停键。我在实际部署时踩过不少坑进程明明还在助手却不回消息日志显示凌晨三点系统睡过去了等早上唤醒 OpenClaw 才继续处理任务。要解决这个问题核心就两件事让 Mac mini 不休眠让 OpenClaw 以系统服务的形态常驻。这篇文章把完整过程写下来包含系统设置、pmset 参数、launchd 托管和各种我实际遇到的坑照着做基本就能让机器安安静静地在角落里持续干活。1. 一台常驻的 Mac mini 到底能做什么很多人把 Mac mini 买回来当电视盒子或者轻度办公机其实它更合适的定位是一台低功耗家庭服务器。机身小、噪音低、功耗低放在书桌角落或者弱电箱旁边都合适比自组一台 ATX 主机省心太多。让它 24 小时开机跑 OpenClaw本质上就是把“随时待命的个人 AI 助理”这件事落地。OpenClaw 的玩法很多样。你可以把它的 Skill 机制理解成给助理“装上手和脚”收到消息之后它不只聊天还能去执行脚本、读写文件、调用外部接口、帮你整理数据。这类能力一旦跑起来对进程的连续性要求就很高。比如我让 OpenClaw 每天早上定时读一遍指定文件夹里的报告然后生成摘要发到聊天工具里。如果 Mac mini 夜里睡了这个任务就会整个卡住等唤醒之后可能直接跳过或者堆在一起重复执行。所以“不休眠运行”并不是个洁癖需求而是 OpenClaw 常驻模式的基本前提。对新手来说最直观的好处是你不用每次想用的时候再手动唤醒设备、重新启动服务。对已经跑了一段时间的老手来说这个需求会更强烈因为服务一旦上了轨道你会越来越依赖它不想再操心“那台机器到底睡没睡”这种基础问题。这篇文章适合两类人。一类是刚买了 Mac mini 准备部署 OpenClaw 的新手我把从系统设置到服务的完整流程都写了另一类是已经在跑但发现半夜经常掉链子的人可以直接跳到第 5 节看坑和排查。下面我按自己的真实操作顺序来讲不是理论推演每一条都在这台机器上实测过。2. 部署前先把几个概念定清楚2.1 常驻服务和交互式脚本完全是两种玩法刚开始玩 OpenClaw 的时候很多人习惯在终端里直接敲命令启动看到日志一条条刷出来觉得服务“跑起来了”。这种方式验证配置没问题但根本扛不住长期运行。终端窗口一关进程就收到 SIGHUP 退出了Mac mini 一旦重启你还得手动去开。更麻烦的是如果你不小心按了 CtrlC整个会话直接断掉。我后来把 OpenClaw 理解成“服务”而不是“脚本”一切思路就顺了。服务要有独立的运行目录、独立的日志文件、独立的环境变量还要随着系统开机自动启动进程意外退出之后能自动拉起来。macOS 上实现这套机制的原生方案是 launchd也就是 LaunchDaemon 和 LaunchAgent。系统层面的守护任务用 LaunchDaemon登录用户环境里的任务用 LaunchAgent。OpenClaw 这种无界面的后台服务放 LaunchDaemon 更合适因为它在用户登录之前就能启动也不会因为注销而退出。2.2 算力入口不止 API 一种OpenClaw 的算力来源大致分两类。一类是外部模型服务直接把请求发到云端推理接口响应快、对本地性能要求低但需要联网并且要考虑调用成本。另一类是本地模型比如通过 Ollama 把模型跑在本机OpenClaw 调一个本地地址就行。很多人问“OpenClaw 是不是只能用接入 API 的方式使用算力”其实不是。只要本机内存和性能足够完全可以把模型放在 Ollama 里OpenClaw 通过兼容接口调用。我在实际使用中是把两种方式混合的日常聊天类和简单工具调用走外部服务感觉更快一些内部数据的处理任务则让 Ollama 跑本地小模型避免敏感信息出本机。这样还有个好处即使外部服务临时不可用本地模型还能兜底让整个助理不至于完全瘫痪。性能方面Mac mini 的集成显卡跑大模型不要有太高的期待7B 参数左右的量化模型勉强可用主要瓶颈在内存带宽。2.3 给 OpenClaw 安排一个独立工作目录这是个很多人忽略但极其重要的细节。不要把 OpenClaw 直接装在你的个人用户目录下面比如/Users/你的名字/openclaw因为这样一来所有日志、配置、缓存都跟你日常使用的文件混在一起。我专门建了一个叫srv的账户整个 OpenClaw 实例都放在/Users/srv/openclaw下。这样做的最大好处是权限边界清晰服务只碰这个目录不会因为手滑删掉其他文件将来换机器迁移直接打包整个目录搬走就行。独立账户还能解决环境变量混乱的问题。OpenClaw 运行时可能需要 Node.js、Python、Ollama 等一堆依赖如果都装在个人账户下很容易出现“我这边能跑换个人就不行”的情况。用独立账户后PATH、HOME、配置文件的位置都很干净排查问题的时候一眼就能看懂。你如果觉得建账户太麻烦至少也要在个人目录下单独划一个目录并且不要用带空格的路径。2.4 顺带澄清rosclaw 和 OpenClaw 不是同一个项目我在搜资料的时候看到热词里有“rosclaw openclaw ros2 humble gazebo”这里有必要说明一下。OpenClaw 作为个人助理服务跟 ROS 2 生态里的 rosclaw 完全是两码事。rosclaw 一般是机器人操作系统相关的节点或驱动跑在 Gazebo 仿真环境里而本文说的 OpenClaw 是一个面向日常任务处理的 AI 助手服务。如果你是因为搜 rosclaw 误入这篇文章方向就偏了。两者的部署方式、依赖环境、用途都不同不要混着看。3. 让 Mac mini 不睡先从系统层下手3.1 图形界面里的几处开关最简单也最容易被忽略的操作是在系统设置里把睡眠关掉。macOS 不同版本路径略有差别新版本在“系统设置 电池 选项”里旧版本在“系统偏好设置 节能”里。Mac mini 没有内置电池但系统设置里有时候依然会显示“电池”入口点进去后找“在电源适配器上使用时防止电脑自动进入睡眠”。把它勾上显示器可以按需关闭主机就不要睡了。这里有个细节值得说。很多人勾了防止睡眠之后发现过几天又出现半夜睡着的日志原因往往是系统里存在其他睡眠策略比如“如果可能使硬盘进入睡眠”或者“电池供电时”的选项。Mac mini 虽然是台式机但有些蓝牙外设或者节能策略会触发深度空闲。所以图形界面只适合快速操作真正要做到精细化控制还得靠命令行。3.2 用 pmset 看机器真实睡眠状态图形界面显示的只是部分状态我推荐用 pmset 查看真实电源管理配置。在终端执行pmset -g输出里有一堆参数重点看这几个sleep、displaysleep、disksleep、womp、powernap。如果sleep显示的不是 0说明系统仍然有自动睡眠计时器。注意不同机型和 macOS 版本默认值差异很大我的 Mac mini 上第一次看到的是sleep 60意思是空闲 60 分钟后进入睡眠但配置层面可能还有更长的延迟。pmset -g custom这条命令能看到针对“电源适配器供电”和“电池供电”两套不同配置。Mac mini 虽然没有电池但 pmset 仍然区分AC和Battery两栏实际生效的一般是 AC 那栏。排查“为什么明明设置了不休眠却还是睡了”的时候这两条命令是首选。3.3 为什么设了 sleep 0 还是会睡有次我把sleep设成 0以为万事大吉结果用log show查日志发现机器在凌晨还是进入了不活跃状态。后来才搞清楚问题出在powernap和standby这类高级电源策略上。powernap会让机器在睡眠边缘做定时唤醒如果某些后台任务异常它也可能推动系统进入更深层次的休眠。另外Mac mini 上如果开启了 FileVault 或其他安全策略重启后需要先解锁磁盘这可能影响开机自启服务的正常拉起。虽然这不直接影响睡眠但会让人误以为“机器没醒过来”。我遇到过几次早上起来发现磁盘日志显示“上一次关机不正常”查了半天发现是半夜断电导致自动重启重启后停在登录界面没有解锁OpenClaw 自然起不来。所以想让 Mac mini 24 小时不休眠运行 OpenClaw不能只看sleep一个参数要把整套电源策略调成适合“服务器角色”的状态。3.4 我实际在用的 pmset 组合我目前的主力配置是这一套逐条说明用途sudo pmset -a sleep 0 sudo pmset -a displaysleep 10 sudo pmset -a disksleep 0 sudo pmset -a womp 1 sudo pmset -a powernap 0 sudo pmset -a tcpkeepalive 1 sudo pmset -a hibernatemode 0 sudo pmset -a standbydelay 0sleep 0系统空闲永不睡眠。这是最核心的一条。displaysleep 10显示器 10 分钟后关闭。Mac mini 没接显示器时可以忽略接了显示器也不希望它一直亮着。disksleep 0不让硬盘在空闲时进入睡眠。OpenClaw 的日志和缓存要随时可写磁盘睡了会导致某些任务被卡住。womp 1开启网络唤醒。如果你希望在外面通过局域网把机器叫醒这一条需要开着。powernap 0关闭电源小睡。对常驻服务来说一个不稳定的间歇性唤醒机制反而是麻烦。tcpkeepalive 1保持 TCP 连接存活。避免长时间空闲后连接被系统断开。hibernatemode 0睡眠时不把内存内容写入硬盘。既然已经不让系统睡了这条主要是防止极端情况下的深度休眠。standbydelay 0部分机型有这个参数把它设成 0避免系统在特定延迟后自动进入 standby。注意hibernatemode 0意味着系统突然断电时内存里的未保存数据可能丢失。对 Mac mini 这种常驻节点来说这个风险是可以接受的因为 OpenClaw 本身有状态文件进程被杀也能从配置和缓存中恢复。但如果你的机器上还跑着数据库之类的服务建议慎重一点。3.5 合盖、显示器、断电重启这些周边问题Mac mini 没有盖子不存在“合盖睡眠”的问题但接显示器会带来一个新麻烦如果显示器自身进入待机HDMI 信号中断某些显卡策略会误以为用户离开了从而触发其他节能逻辑。解决方式很简单不接显示器跑服务或者把显示器通过 HDMI 欺骗器插上让系统始终认为有显示器在线。我后来直接拔掉了显示器用远程桌面或者 SSH 管理除了设置分辨率时稍微费点劲日常使用非常舒服。断电重启这个事要重视。24 小时开机意味着你会遇到停电、插线板松动、家庭电路跳闸等情况。Mac mini 默认断电重启后不会主动开机需要在“系统设置 电池/节能 选项”里找到“断电后自动启动”或类似选项把它打开。没有这个设置的古早机型可以试试sudo pmset -a autorestart 1。我吃过一次亏家里跳闸Mac mini 关机了OpenClaw 一整天没服务I’m 后来才发现原来还要开这个开关。4. 部署 OpenClaw 并把它变成系统常驻服务4.1 先把运行环境装好OpenClaw 的安装方式会随版本变化但核心依赖通常是 Node.js 和 Python。我在独立账户srv下用 Homebrew 装了一遍命令大概是/bin/bash -c $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh) brew install node python如果是 Apple Silicon 芯片Homebrew 的默认路径是/opt/homebrew/binIntel 芯片则是/usr/local/bin。这个路径后面写 launchd plist 时要特别注意因为 LaunchDaemon 不像你在终端里那样继承你配置过的 PATH它只有系统默认的一小段路径。我最初踩的坑就是plist 里直接写node结果服务启动失败因为 launchd 找不到 node。正确做法是 ProgramArguments 里写 node 的绝对路径或者通过 EnvironmentVariables 手动指定 PATH。Ollama 装不装看你的需求。如果准备接本地模型可以一并安装brew install ollama ollama pull qwen2.5:7bOllama 默认监听127.0.0.1:11434OpenClaw 通过这个地址就能调用本地模型不需要额外配置权限。装好 Ollama 后别忘了设置开机自启否则 Mac mini 重启后模型服务不会自己跑起来。4.2 初始化 OpenClaw 配置目录装好依赖后我先创建一个专门的工作目录。以独立账户srv为例我习惯这样做mkdir -p /Users/srv/openclaw/{config,logs,data,skills} cd /Users/srv/openclaw openclaw init --config ./config/config.yamlOpenClaw 的初始化命令会生成一个配置模板里面通常包含模型接入信息、Skill 加载路径、消息渠道配置等。这个 config.yaml 之后就是我修改的重点。一定给这个目录设置好权限chown -R srv:srv /Users/srv/openclaw chmod 700 /Users/srv/openclaw为什么要单独建目录因为我希望日志文件、技能脚本、本地缓存都集中在同一个顶级目录下备份和迁移都很方便。你可以把它理解成“给 OpenClaw 盖了一个员工宿舍”它不会再去动你工作目录里的其他文件。后续升级版本的时候只要保留 config 和 data 目录重装二进制文件即可配置不会丢。4.3 接外部模型服务还是本地 Ollama在 config.yaml 里模型接入这一块是最核心的。接入外部服务时通常需要填一个请求入口地址和一个密钥。这里的“入口地址”就是模型服务商提供的 HTTP 接口地址比如完整的 chat/completions 端点。我不建议把密钥直接写在 config.yaml 里尤其是当 config.yaml 在仓库或者备份里时泄露风险比较大。更稳妥的做法是让 OpenClaw 支持从环境变量读取密钥如果版本不支持至少把文件权限收紧到只有srv用户可读。接入 Ollama 就简单得多OpenClaw 里把 base_url 写成http://127.0.0.1:11434/v1model 填你拉取的模型名即可。因为这个接口本质上是 OpenAI 兼容格式OpenClaw 通常不需要额外插件。我实际测试下来Qwen 2.5 7B 在 Mac mini 上响应速度还行用来做工具调用和文本摘要完全够用图片理解类任务则要依赖外部视觉模型。除了模型接入OpenClaw 的 Skill 机制也需要在配置里指定加载目录。我习惯把技能脚本一个个放在skills目录每个技能一个子目录里面包含描述文件和执行脚本。OpenClaw 重启时会扫描这个目录把可用技能注册进去。这样加新功能不需要改主程序只是往目录里放一个新技能文件的事。4.4 用 launchd 托管进程一旦目录和配置都验证好下一步就是把 OpenClaw 交给 launchd。我写了一个 LaunchDaemon plist放在/Library/LaunchDaemons/com.openclaw.daemon.plist内容大概是这样的?xml version1.0 encodingUTF-8? !DOCTYPE plist PUBLIC -//Apple//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd plist version1.0 dict keyLabel/key stringcom.openclaw.daemon/string keyProgramArguments/key array string/opt/homebrew/bin/openclaw/string string--config/string string/Users/srv/openclaw/config/config.yaml/string /array keyRunAtLoad/key true/ keyKeepAlive/key true/ keyStandardOutPath/key string/Users/srv/openclaw/logs/stdout.log/string keyStandardErrorPath/key string/Users/srv/openclaw/logs/stderr.log/string keyEnvironmentVariables/key dict keyOPENCLAW_HOME/key string/Users/srv/openclaw/string keyPATH/key string/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin/string /dict /dict /plist几个关键点说一下。ProgramArguments里用的是绝对路径不是openclaw这个裸命令否则 launchd 找不到。KeepAlive设为 true 后进程意外退出时 launchd 会立刻重新拉起。StandardOutPath和StandardErrorPath一定要指向一个确定存在的目录否则 launchd 可能拒绝启动任务。EnvironmentVariables里的 PATH 覆盖是出于保险避免 OpenClaw 在运行时去调用 node 或 python 时失败。加载这个服务sudo chown root:wheel /Library/LaunchDaemons/com.openclaw.daemon.plist sudo launchctl load -w /Library/LaunchDaemons/com.openclaw.daemon.plist如果你用的 macOS 较新也可以使用sudo launchctl bootstrap system /Library/LaunchDaemons/com.openclaw.daemon.plist。两种写法目标一致但老版命令在部分系统上会提示建议使用 bootstrap。查看服务状态sudo launchctl print system/com.openclaw.daemon这个命令会显示进程 PID、上次退出状态、标准输出路径等诊断信息。进程一旦被 KeepAlive 反复拉起这里也会留下痕迹方便排查是不是配置有问题。4.5 环境变量和密钥不要写进 plistplist 文件里虽然可以写 EnvironmentVariables但我不建议把所有密钥都堆进去。原因很实际plist 属于系统级配置文件任何具备管理员权限的进程/人员都可能读取而且 plist 一多管理起来很混乱。更干净的做法是用一个独立的env文件启动命令里通过类似--env-file的方式加载或者用 launchd 的EnableTransactions之外的手段在你的启动脚本里手动加载。我最终的做法是写了一个start.sh放在/Users/srv/openclaw/start.shplist 里的 ProgramArguments 改成调用这个脚本#!/bin/bash source /Users/srv/openclaw/.env exec /opt/homebrew/bin/openclaw --config /Users/srv/openclaw/config/config.yaml.env文件里保存各种 token 和密钥chmod 600。这样同一个 plist 文件可以进 Git 仓库而不泄露敏感信息真实的密钥只存在于那台机器上。如果你不想用 .env也可以直接用 launchctl 的setenv设置用户级环境变量但系统级 LaunchDaemon 建议还是用脚本里的 source 方式简单直接。4.6 怎么确认服务真的活着配好 launchd 之后别急着关终端先观察一会儿。我用三条命令确认服务状态sudo launchctl print system/com.openclaw.daemon ps aux | grep openclaw tail -f /Users/srv/openclaw/logs/stdout.log如果启动失败launchctl print system/com.openclaw.daemon输出里的last exit code会给出线索。比较常见的问题是权限不对日志目录无法写入、config.yaml 不可读或者 openclaw 二进制没有执行权限。另外要注意KeepAlive和配置错误叠加的情况。如果 config.yaml 写错了导致进程启动就崩KeepAlive 会进入疯狂重启循环日志文件短时间内膨胀到几百 MB这种情况要先sudo launchctl bootout system/com.openclaw.daemon停掉服务再改配置。验证 OpenClaw 本身的健康状态我通常直接给它发一条测试消息看它是否正常回复。如果命令行下有内置的 ping 或 health 命令优先使用如果没有就去日志里找一条它启动完成后打印的“listening”信息。记住进程活着不等于服务健康只有消息能正常收发才算真正跑通了。5. 连续运行后我踩过的坑5.1 日志里全是 sleep/wake即使设置了不休眠系统在某些情况下还是会产生睡眠和唤醒事件比如用户手动选择睡眠、突然断电重启或者某个外设触发了唤醒。我建议定期用这命令检查pmset -g log | grep -i sleep\|wake | tail -20如果看到非预期的 sleep 事件先排查是不是有用户登录界面处于锁定状态然后看看有没有定时器把它唤醒。Mac mini 默认可能开启“定时”功能在“系统设置 电池/节能”里如果有“启动或唤醒”的时间表把它关掉。这个时间表平时很难注意到但会像闹钟一样把机器从睡眠中强制拉起来对常驻服务来说反而造成睡眠/唤醒抖动。5.2 进程在但 OpenClaw 不响应有次日志显示开 openclaw 进程还在PID 没变但发消息就是不回复。用sample命令抓了一下进程状态发现它卡在一个网络请求上疑似等待某个外部接口响应超时。OpenClaw 长时间运行后网络库或事件循环偶尔会卡住这是常驻服务的通病。我的处理方式是手动重启服务sudo launchctl bootout system/com.openclaw.daemon sudo launchctl bootstrap system /Library/LaunchDaemons/com.openclaw.daemon.plist如果你不想手动干预也可以在 OpenClaw 或外层脚本里加一个定时健康检查比如每隔一段时间发一条请求超时无响应就重启进程。launchd 的 KeepAlive 只负责在进程退出时拉起无法感知进程是否“假死”所以这种应用层健康检查很有必要。5.3 断网重连和 DHCP 租约问题Mac mini 长时间开机网络方面会遇到一个很现实的问题DHCP 租约过期后不一定能正常续约。如果路由器或交换机重启DHCP 服务器可能重新分配 IP而 OpenClaw 如果缓存了旧地址就会出现“进程在跑但外部回调发不进不来”的情况。解决方式很简单给 Mac mini 在路由器上设置静态 DHCP 绑定或者直接在系统里配置一个固定的局域网 IP。我后来还把 tcpkeepalive 参数设置为 1从系统层面保持长连接。如果你用的是 Wi-Fi注意 macOS 的省电模式也可能让 Wi-Fi 在屏幕关闭后进入低功耗状态最好在“系统设置 网络 Wi-Fi”里关闭“低数据模式”相关的节电选项。网线连接最省心尽量给 Mac mini 插一根网线。5.4 磁盘写入、日志轮转与散热24 小时持续运行日志文件增长是必然的。OpenClaw 本身会打不少日志launchd 还额外捕获 stdout 和 stderr如果服务偶发报错日志增长速度会很惊人。我的办法是写了一个简单的日志轮转任务让 logrotate 或定时任务定期压缩和清理日志目录。不用搞太复杂每天凌晨把超过 50 MB 的旧日志挪到logs/archive目录保留最近 7 天就够。散热方面Mac mini 虽然安静但持续高负载下机身会微微发热。我摸了一下外壳长期跑 Ollama 推理时底部温度明显上升。建议不要把它塞进密闭的柜子或者堆满杂物的角落保留通风空间。如果发现温度过高可以用sudo powermetrics --samplers smc -i 1000粗略看 CPU 温度数值持续超过 90 摄氏度就需要考虑改善散热环境。5.5 常见问题排查速查表现象可能原因处理方式设置了 sleep 0 还是会睡powernap 或定时唤醒策略sudo pmset -a powernap 0关闭系统设置中的“定时”launchd 显示服务已加载但进程不存在ProgramArguments 路径错误使用绝对路径用launchctl print system/com.openclaw.daemon查看错误日志文件疯狂增长配置错误触发 KeepAlive 重启循环先 bootout 停服修配置后再 bootstrapOpenClaw 不响应但进程在网络请求卡死或事件循环阻塞手动重启服务增加应用层健康检查外部服务回调进不来DHCP 租约变化或防火墙拦截路由器设置静态 DHCP本机固定局域网 IP开机后服务没有自动启动没有打开断电自动开机FileVault 锁定磁盘打开“断电后自动启动”关闭开机解锁重启后 Ollama 不在Ollama 未设为开机自启brew services start ollama日志时间戳不对时区设置问题系统设置里确认时区让 NTP 自动同步6. 进阶要不要把 OpenClaw 放进容器跑6.1 容器化的收益与代价如果你已经跑顺了裸机部署可以试试容器化方案。把 OpenClaw 放进容器里的最大收益是隔离依赖、配置、日志全部封装在一个镜像里将来迁移到其他设备或者升级版本时不需要一层层检查系统环境。代价是需要额外消耗一部分资源而且 macOS 上的容器方案本质是虚拟化性能损耗比 Linux 高一些。我个人的观点是如果 OpenClaw 只在这台 Mac mini 上跑而且你不打算频繁迁移裸机方案完全够用launchd 已经很好地把进程托管起来了。但如果你手头还有 Linux 服务器希望把同一套配置复制过去容器化会更合适。OpenClaw 的配置和数据目录通过挂载卷映射到宿主机这样容器即使重建配置也不会丢。6.2 我用 OrbStack 替代 Docker Desktop 的原因在 Mac 上跑容器最常见的选择是 Docker Desktop但它吃内存比较厉害免费版偶尔会弹限流提示。我后来换成 OrbStack这家伙轻量很多启动速度快对 Apple Silicon 的优化也好。它完全兼容 Docker CLI所以迁移成本很低就是把docker命令直接拿来用。使用 OrbStack 启动 OpenClaw 容器大概流程是docker run -d \ --name openclaw \ --restart unless-stopped \ -v /Users/srv/openclaw/config:/app/config \ -v /Users/srv/openclaw/logs:/app/logs \ --network host \ your-image-name:tag--restart unless-stopped告诉 Docker 在容器退出时自动重启--network host让容器直接使用宿主机网络这样访问 Ollama 的 127.0.0.1 时不需要额外配置。要注意的是OrbStack 在 macOS 上本质上还是一个轻量虚拟机环境容器的网络模式和端口映射策略跟 Linux 原生 Docker 不完全一样实际使用时建议先跑一个测试容器摸清楚行为。6.3 容器下的开机自启配置容器方案里的开机自启依赖 OrbStack 自己的开机启动和容器的重启策略。OrbStack 安装后默认会注册为登录时启动你在插件里确认一下它跟随系统启动。Docker 容器的--restart unless-stopped策略会在容器异常退出时拉起但宿主机开机后OrbStack 需要先完成初始化容器才会被拉起来所以启动顺序上会比 LaunchDaemon 慢几秒。如果对启动顺序有严格要求也可以用 launchd 去调用docker start openclaw把两者结合起来keyProgramArguments/key array string/usr/local/bin/docker/string stringstart/string stringopenclaw/string /array说到底容器化是对“整洁”和“可移植”的追求而不是解决不休眠问题的必需品。只要 Mac mini 的系统和网络这层做好了裸机跑 OpenClaw 已经足够可靠。7. 我个人目前的最终配置清单7.1 pmset 参数快照这是我现在机器上的实际快照你可以对照自己的机器检查sudo pmset -a sleep 0 sudo pmset -a displaysleep 10 sudo pmset -a disksleep 0 sudo pmset -a womp 1 sudo pmset -a powernap 0 sudo pmset -a tcpkeepalive 1 sudo pmset -a hibernatemode 0 sudo pmset -a standbydelay 0每次系统升级后pmset 参数有可能会被重置。macOS 的大版本更新偶尔会改动电源管理默认值所以我升级系统后会重新跑一遍这几条命令然后对照pmset -g确认。7.2 launchd plist 快照我非常推荐使用 LaunchDaemon 而不是 LaunchAgent。LaunchAgent 需要用户登录才生效一旦机器重启后停在登录界面服务就起不来。LaunchDaemon 则完全绕开登录流程只要系统内核启动完成就会执行。plist 文件我放在/Library/LaunchDaemons/com.openclaw.daemon.plist关键内容就是前面给出的那段。每次修改 plist 后记得先 bootout 再 bootstrap否则修改不会生效。还有plist 文件必须属主为 root、权限为 644否则 launchd 会拒绝加载。7.3 三条日常检查命令我每天并不会刻意去审查 OpenClaw 状态只在出了问题时用这几条命令定位sudo launchctl print system/com.openclaw.daemon tail -n 100 /Users/srv/openclaw/logs/stderr.log pmset -g | grep -E sleep|womp|powernap偶尔也会用uptime看一眼机器到底连续开机了多久。有一次系统因为自动更新重启了两次uptime 数字暴露出问题我才意识到 macOS 的后台自动更新也会干扰常驻服务。如果你不想让系统随意重启在“系统设置 软件更新 自动更新”里把“安装 macOS 更新”和“安装系统数据文件”的选项适当调整或者至少接受这种偶发性重启再靠 launchd 把服务拉回来。我个人在实际操作中的体会是Mac mini 跑 OpenClaw 的难点并不在安装配置而是在于你能不能接受“它是一台服务器”这个角色转变。当你开始为它做静态 IP、供电保护、日志轮转、进程托管、断电自动开机这些事的时候它才算真正融入了你的家庭基础设施。之后你会慢慢发现OpenClaw 可以帮你做的远不止聊天一点一点添加新 Skill、新自动化任务这台小主机会越来越离不开。