乐于分享
好东西不私藏

我的AI助手终于稳定了!OpenCode服务部署避坑指南

我的AI助手终于稳定了!OpenCode服务部署避坑指南

前言

很多朋友在使用OpenCode服务时,都会遇到两个烦人的问题:

问题一:电脑闲置后微信断连
Windows默认会在一段时间不活动后进入睡眠模式,导致所有服务暂停运行。这时微信AI就会显示"已断开连接",需要手动激活电脑运行。

问题二:异常重启后服务不恢复
电脑蓝屏或意外重启后,OpenCode和微信桥接服务(WBO)不会自动恢复运行,还得手动操作一遍,非常麻烦。
今天这篇文章,我将分享如何将这两个服务从计划任务升级为Windows系统服务,一次性解决以上两个问题。文章中会特别标注实操过程中的踩坑点和避坑建议,帮你少走弯路。

一、系统架构说明

我们的部署架构包含两个核心服务:

OpenCode服务

  • AI核心引擎,提供智能对话和代码执行能力
  • 监听地址:localhost:4096
  • 作为基础服务,其他服务依赖于它

WBO桥接服务

  • 微信消息桥接器,连接OpenCode和微信
  • 依赖OpenCode服务,必须在其之后启动

两者的关系是:WBO服务 → 依赖 → OpenCode服务

二、使用WinSW部署系统服务

2.1 为什么选择WinSW?

WinSW(Windows Service Wrapper)是一个轻量级的开源工具,可以将任何可执行文件包装成Windows系统服务。相比计划任务,系统服务有以下优势:

  • 启动更早:系统启动时就开始运行,无需等待用户登录
  • 更稳定:支持崩溃自动恢复
  • 原生依赖管理:可以设置服务间的依赖关系
  • 专业管理:使用Windows服务管理器统一管理

2.2 文件结构

部署后的文件结构如下:

C:\Services\├── opencode.exe      # OpenCode服务主程序├── opencode.xml      # OpenCode服务配置├── wbo.exe           # WBO服务主程序├── wbo.xml           # WBO服务配置└── logs\             # 服务日志目录

2.3 OpenCode服务配置

配置文件 opencode.xml 的内容:

<service>  <id>OpenCode</id>  <name>OpenCode Service</name>  <description>OpenCode AI服务</description>  <executable>C:\Users\hd\AppData\Roaming\npm\opencode.cmd</executable>  <arguments>serve --hostname 0.0.0.0 --port 4096</arguments>  <workingdirectory>C:\Users\hd</workingdirectory>  <onfailureaction="restart"delay="10 sec"/>  <onfailureaction="restart"delay="20 sec"/>  <onfailureaction="none"/>  <resetfailure>1 hour</resetfailure>  <starttype>Automatic</starttype></service>

配置说明:

  • 服务ID和名称:用于在服务管理器中识别
  • 启动命令:直接调用npm安装的opencode.cmd包装器
  • 失败恢复:失败后10秒、20秒自动重启,之后停止
  • 启动类型:自动启动,系统启动时运行

2.4 WBO服务配置

配置文件 wbo.xml 的内容:

<service>  <id>WBO</id>  <name>WBO Bridge Service</name>  <description>WBO微信桥接服务</description>  <executable>C:\Users\hd\AppData\Roaming\npm\wbo.cmd</executable>  <arguments>--server-username your_username --server-password your_password --server-url http://localhost:4096</arguments>  <workingdirectory>C:\Users\hd</workingdirectory>  <depend>OpenCode</depend>  <onfailureaction="restart"delay="10 sec"/>  <onfailureaction="restart"delay="20 sec"/>  <onfailureaction="none"/>  <resetfailure>1 hour</resetfailure>  <starttype>Automatic</starttype></service>

关键配置:

  • depend标签:声明依赖OpenCode服务
  • 启动参数:包含桥接服务的认证信息(请替换为你的实际配置)
  • 账号密码设置为opencode服务的账号密码

2.5 安装服务

打开管理员权限的PowerShell,执行以下命令:

# 安装OpenCode服务"C:\Services\opencode.exe" install# 安装WBO服务"C:\Services\wbo.exe" install

安装成功后,可以在Windows服务管理器(services.msc)中看到这两个服务。

2.6 服务账户配置(重要)

默认情况下,Windows服务以 LocalSystem 账户运行。但 LocalSystem 的HOME目录是 C:\Windows\system32\config\systemprofile,与用户目录不同,导致OpenCode无法加载用户配置(插件、MCP等)。

问题现象:

  • 服务能正常启动,但连接后显示初始化状态
  • 没有加载已安装的插件和MCP服务器
  • 错误日志显示尝试从 C:\Windows\system32\config\systemprofile\.config\opencode\ 加载配置

解决方案:将服务改为以用户身份运行

步骤1:授予用户"以服务身份登录"权限

# 获取用户SID$hdUser = Get-LocalUser -Name "你的用户名"$hdSID = $hdUser.SID.Value
# 创建安全策略文件
$infContent = @"[Unicode]Unicode=yes[Version]signature="`$CHICAGO`$"Revision=1[Privilege Rights]SeServiceLogonRight = *$hdSID"@$infPath = "$env:TEMP\secpolicy.inf"$infContent | Out-File -FilePath $infPath -Encoding Unicode
# 应用安全策略secedit /configure /db "$env:TEMP\secedit.sdb" /cfg $infPath /areas USER_RIGHTS# 清理临时文件Remove-Item $infPath -Force步骤2:修改服务登录账户# 修改OpenCode服务sc.exe config OpenCode obj= ".\你的用户名" password= "你的Windows登录密码"# 修改WBO服务sc.exe config WBO obj= ".\你的用户名" password= "
你的Windows登录密码"

步骤3:重启服务验证

Restart-Service -Name "OpenCode""WBO" -ForceGet-Service -Name "OpenCode""WBO"

验证成功标志:

  • 服务状态显示为 Running
  • 连接后能看到已配置的插件和MCP服务器
  • 不再显示初始化状态

注意事项:

  • Windows密码更改后,需要重新配置服务密码
  • 如果权限授予失败,可通过 secpol.msc(本地安全策略)手动添加

三、解决睡眠断连问题

3.1 问题分析

Windows默认会在15-30分钟不活动后进入睡眠模式。睡眠时:

  • 所有进程暂停运行
  • 网络连接断开
  • 微信检测到连接断开,显示"已断开"

3.2 解决方案

禁用睡眠功能,保留屏幕关闭设置:

# 禁用睡眠(接通电源时)powercfg /change standby-timeout-ac 0# 禁用睡眠(使用电池时)powercfg /change standby-timeout-dc 0# 禁用休眠(接通电源时)powercfg /change hibernate-timeout-ac 0# 禁用休眠(使用电池时)powercfg /change hibernate-timeout-dc 0

3.3 验证设置

执行以下命令查看当前设置:

powercfg /query SCHEME_CURRENT SUB_SLEEP
如果看到"当前电源设置索引:0x00000000",表示已成功禁用。

设置完成后:

  • 睡眠:从不(接通电源/电池都禁用)
  • 休眠:从不(接通电源/电池都禁用)
  • 屏幕关闭:保留原有设置(可按需调整)

四、常用管理命令

4.1 服务状态查看

# 查看服务状态Get-Service -Name "OpenCode""WBO"

4.2 服务启停操作

# 启动服务Start-Service -Name "OpenCode"Start-Service -Name "WBO"# 停止服务Stop-Service -Name "WBO"Stop-Service -Name "OpenCode"# 重启服务Restart-Service -Name "OpenCode"Restart-Service -Name "WBO"

4.3 服务卸载

# 卸载服务"C:\Services\wbo.exe" uninstall"C:\Services\opencode.exe" uninstall# 删除服务文件Remove-Item -Path "C:\Services" -Recurse -Force

五、故障恢复机制

系统服务配置了自动故障恢复:

  • 第一次失败:10秒后自动重启
  • 第二次失败:20秒后自动重启
  • 第三次失败:停止重启,等待手动干预
  • 1小时后:重置失败计数

日志文件位于 C:\Services\logs\ 目录,按大小滚动(10MB/文件,保留5个文件),方便排查问题。

六、方案对比

对比项
计划任务
系统服务
启动时机
用户登录时
系统启动时(更早)
运行上下文
用户上下文
系统上下文
崩溃恢复
不支持
自动重启
依赖管理
需延迟实现
原生支持
管理工具
任务计划程序
服务管理器

七、总结

通过将OpenCode和WBO部署为Windows系统服务,并禁用睡眠功能,我们可以:

  1. 实现开机自启动,无需手动干预
  2. 获得更稳定的运行环境
  3. 解决长时间不操作导致的断连问题
  4. 享受专业的故障恢复机制

这套方案已经稳定运行,希望对有同样需求的朋友有所帮助。