
1. 为什么 Windows 下 OpenClaw 开机自启总是失败很多人第一次在 Windows 上部署 OpenClaw都会经历一个非常相似的场景当天晚上跑通了飞书、Telegram 或者本地控制台都能正常对话关机睡觉。第二天早上起来发消息没有任何反应打开电脑一看OpenClaw 根本没起来。这个问题的根源其实不在 OpenClaw 本身而在于 Windows 和 WSL 的启动机制是两套独立体系。OpenClaw 的网关服务跑在 WSL 的 Linux 用户空间里而 Windows 开机登录时并不会自动帮你把 WSL 里的用户级 systemd 服务拉起来。你手动打开 WSL 终端时它看起来是好的是因为终端会话触发了用户服务一旦没有交互式终端服务就处于「装了但没跑」的状态。所以完整的开机自启链路要拆成两段第一段是在 WSL 内部让 OpenClaw 网关成为可持续运行的用户服务第二段是在 Windows 侧用 PowerShell 注册一个登录时触发的任务把 WSL 拉起来并启动这个服务。两段都做对重启后才能真正无人值守。这篇内容适合已经在 Windows 上装好 WSL 和 OpenClaw、但被自启动问题卡住的用户也适合准备把 OpenClaw 当长期在线助手来用的人。下面我会给出可复制的 config.toml 与 settings.json 骨架、启动脚本片段以及重启后验证自启动是否生效的具体检查动作。整个过程中TaoToken 作为统一的 Key/API 通道接入省去你在多个模型供应商之间来回切换配置的麻烦。2. TaoToken 前置统一 Key 与 API 通道在配置自启动之前先把模型通道这件事定下来。OpenClaw 支持多种模型后端如果你每个模型都单独配一套 Keyconfig.toml 会变得很难维护自启动脚本里也容易漏掉环境变量。TaoToken 的思路是提供一个统一的 API 入口你只需要在配置里写一个 base_url 和一个 Key就能调用多个模型。TaoToken 官网地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 入口是 https://taotoken.net/api 。注意 API 地址不带 UTM 参数配置里直接写这个就行。你需要先拿到一个 API Key。登录后进入控制台在 API Keys 页面创建一个新的 Key复制保存好。这个 Key 后面会写进 OpenClaw 的 config.toml也会作为环境变量传给 WSL 里的服务。注意API Key 属于敏感信息不要直接提交到 Git 仓库也不要在公开的启动脚本里明文硬编码。建议放在 WSL 用户目录下的环境文件里通过 systemd 的 EnvironmentFile 加载。如果你还没创建 Key可以走这个路径先访问 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 创建再回到 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 查看用量和余额。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 里面有各语言的调用示例配置 OpenClaw 时对照着看即可。3. 可复制配置config.toml 与 settings.json 骨架3.1 WSL 内 OpenClaw 的 config.tomlOpenClaw 的配置文件通常位于~/.config/openclaw/config.toml。下面是一个接入 TaoToken 的最小骨架你可以直接复制后替换 Key# ~/.config/openclaw/config.toml [gateway] host 0.0.0.0 port 18789 log_level info [model] provider openai-compatible base_url https://taotoken.net/api api_key ${TAOTOKEN_API_KEY} default_model claude-sonnet-4-20250514 [model.fallback] enabled true models [gpt-4o, claude-sonnet-4-20250514] [channels.feishu] enabled true app_id your_feishu_app_id app_secret your_feishu_app_secret这里的关键点是base_url指向 TaoToken 的 API 入口api_key用环境变量占位避免明文。default_model可以按你实际使用的模型名填写fallback 列表用于主模型不可用时自动切换。3.2 环境变量文件在 WSL 里创建~/.config/openclaw/envTAOTOKEN_API_KEYsk-你的实际Key然后设置权限防止其他用户读取chmod 600 ~/.config/openclaw/env3.3 systemd 用户服务单元OpenClaw 网关需要作为用户级 systemd 服务运行。创建~/.config/systemd/user/openclaw-gateway.service[Unit] DescriptionOpenClaw Gateway Afternetwork-online.target Wantsnetwork-online.target [Service] Typesimple EnvironmentFile%h/.config/openclaw/env ExecStart/usr/local/bin/openclaw gateway run Restarton-failure RestartSec5 [Install] WantedBydefault.target注意ExecStart的路径要和你实际安装 OpenClaw 的位置一致可以用which openclaw确认。3.4 Windows 侧 PowerShell 启动脚本在 Windows 上创建一个启动脚本比如C:\Scripts\start-openclaw.ps1# C:\Scripts\start-openclaw.ps1 $distro Ubuntu $service openclaw-gateway wsl.exe -d $distro --bash -lc systemctl --user start $service Start-Sleep -Seconds 3 wsl.exe -d $distro --bash -lc systemctl --user is-active $service这个脚本的作用是登录时拉起 WSL启动用户服务然后检查服务状态。如果你用的不是 Ubuntu把$distro改成wsl -l里显示的名称。3.5 注册计划任务以管理员身份打开 PowerShell执行$action New-ScheduledTaskAction -Execute powershell.exe -Argument -NoProfile -WindowStyle Hidden -File C:\Scripts\start-openclaw.ps1 $trigger New-ScheduledTaskTrigger -AtLogOn $settings New-ScheduledTaskSettingsSet -ExecutionTimeLimit (New-TimeSpan -Hours 0) -RestartCount 3 -RestartInterval (New-TimeSpan -Minutes 1) -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries Register-ScheduledTask -TaskName OpenClaw_AutoStart -Action $action -Trigger $trigger -Settings $settings -RunLevel Highest -Force执行成功后会看到任务状态为 Ready。这里用 PowerShell 脚本包一层比直接在计划任务里写wsl.exe参数更可控也方便后续加日志。4. 验证请求与成功结果配置完成后先不要急着重启在 WSL 里手动验证一遍服务链路。第一步启用 linger让用户服务在终端关闭后继续运行sudo loginctl enable-linger $(whoami)第二步重新加载 systemd 并启动服务systemctl --user daemon-reload systemctl --user enable --now openclaw-gateway第三步查看状态systemctl --user status openclaw-gateway看到active (running)就说明 WSL 内部这一层没问题了。第四步在 Windows 浏览器访问http://localhost:18789能打开 OpenClaw 控制台就说明网关正常。第五步手动运行一次 PowerShell 脚本powershell.exe -NoProfile -File C:\Scripts\start-openclaw.ps1如果输出active说明 Windows 侧调用链路也通了。最后重启电脑登录后等 30 秒左右再次访问http://localhost:18789。如果控制台能打开并且通过飞书发消息有响应就说明开机自启完整生效了。如果你想先验证模型通道是否正常可以打开模型对话页面 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 发一条测试消息确认 Key 和模型都可用再回头排查自启动问题能少走很多弯路。5. 本篇常见错排查5.1 重启后服务没起来手动打开 WSL 就好了这是最典型的现象。原因是 linger 没开或者 systemd 用户服务没有 enable。检查loginctl show-user $(whoami) | grep Linger如果显示Lingerno重新执行sudo loginctl enable-linger $(whoami)。5.2 计划任务显示已运行但服务还是没起大概率是 WSL 发行版名称写错了。用wsl -l -v查看准确名称注意大小写。另外计划任务里如果用了--bash -lc要确保命令在非交互式 shell 下也能找到systemctl。可以在脚本里加绝对路径或者先source ~/.bashrc。5.3 端口 18789 被占用检查 Windows 侧是否有其他程序占用了这个端口netstat -ano | findstr 18789如果有冲突改 config.toml 里的port同时更新验证地址。5.4 API Key 读取不到systemd 的 EnvironmentFile 不会自动展开 shell 变量。确认 env 文件里是TAOTOKEN_API_KEYsk-xxx这种纯键值对格式不要加export也不要用引号包裹。改完后执行systemctl --user daemon-reload systemctl --user restart openclaw-gateway5.5 飞书消息没响应但控制台能打开这说明网关起来了但渠道配置有问题。检查 config.toml 里[channels.feishu]的 app_id 和 app_secret 是否正确以及飞书后台的事件订阅地址是否指向你的公网入口。如果只是本地测试可以先用控制台里的对话功能验证模型通道。5.6 计划任务执行超时被终止默认计划任务有执行时间限制。上面注册时用了-ExecutionTimeLimit (New-TimeSpan -Hours 0)表示不限制。如果你手动创建任务记得在「设置」里把「如果任务运行时间超过以下时间停止任务」取消勾选。6. 长期运行与 Coding Plan 接入如果你打算把 OpenClaw 当作长期在线的编码助手或 Agent 来用建议把模型通道固定到 Coding Plan 上。Coding Plan 针对代码场景做了优化长上下文和工具调用的稳定性更好适合 OpenClaw 这种需要持续处理任务的环境。接入方式很简单在 config.toml 里把default_model换成 Coding Plan 支持的模型base_url 仍然用https://taotoken.net/api。如果你还没开通可以先到 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 了解套餐内容再决定是否切换。对于 Claude Code 这类工具的重度用户TaoToken 也提供了对应的接入方式参考 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 里的 ClaudeCodeAnthropic 章节即可。配置逻辑和 OpenClaw 一致都是统一 base_url 加 Key。最后提醒一个实操细节每次修改 config.toml 或 env 文件后都要执行systemctl --user daemon-reload再 restart否则 systemd 不会重新读取环境变量。这个坑我在调试阶段踩过好几次服务状态显示 running但实际用的还是旧 Key排查了半天才发现是没 reload。