乐于分享
好东西不私藏

openclaw问题记录1

openclaw问题记录1

1 引言

本系列主要记录openclaw部署过程中的一些问题,本期问题主要有两个,一个是关于gateway的滚动log;另一个是qmd部署问题。
配置说明:windows11+openclaw(版本2026.3.28)


2 日志迁移问题

openclaw有两个主要日志

  • • 会话(session)日志:记录UI界面与小龙虾的对话,主要存放路径是.\.openclaw\agents\main\sessions
  • • 网关(gateway)日志:记录每天网关运行的动态信息,主要存放路径是C:\Users\你的用户名\.openclaw\logs\openclaw-YYYY-MM-DD.log

会话日志的路径设置很简单,在配置文件openclaw.json中修改workspace路径,加上设置环境变量OPENCLAW_HOME即可。

  • • 管理员方式打开powershell设置环境变量
[Environment]::SetEnvironmentVariable("OPENCLAW_HOME""D:\openclaw\config""Machine")
  • • 修改workspace路径
openclaw config set agents.defaults.workspace "D:\openclaw\config\.openclaw\workspace"

网关日志的路径设置按照官方,是通过设置logging.file来实现,但是此代码修改并不能实现,这是一个官方bug。

所以这个bug等官方补丁较为可靠。


3 qmd部署问题

qmd能够优化小龙虾的token消耗,版本2026.3.28置留了qmd的接口,但需要自行拉取。

但是部署qmd会出现几个问题。

3.1 /bin/sh问题

通过bun拉取qmd,然后测试qmd是否拉取成功,会出现错误提示:

error: interpreterexecutable "/bin/shnotfoundin %PATH%

这是因为qmd是为Unix/Linux环境设计的,然后运行qmd就在寻找/bin/sh.exe,然而这个路径在根本不不存在。

解决方式有两种:

  • • 在运行qmd的根目录下放置sh.exe
    -- 注意windows的sh.exe通过下载安装git bash实现
  • • 通过符号链接实现,骗取qmd实现
    -- 通过管理员身份打开cmd
mklink /D C:\bin "D:\Program Files\Git\bin"

运用这个方法后,可以单独运行qmd了。
但是在openclaw部署qmd时,可能依然遇到了"/bin/sh" not found的问题。
所以,在网络上查询后,打算采用第二种方法。

3.2 shell问题

第二种解决方式,就是通过npm拉取qmd,然后修改代码

  • • 注意,先把bun拉取的删除。
  • • 修改具体过程可参考https://blog.csdn.net/m0_60387100/article/details/159208307
  • • 这种方法要把"D:\Program Files\Git\bin"加入环境变量

修改"PATH/npm/global"路径下的qmd.cmd文件。

  • • PATH为你设置的npm拉取路径
    直接将其修改为通过node运行qmd
@echo off
node "PATH\npm\global\node_modules\@tobilu\qmd\dist\cli\qmd.js" %*

但是在实际openclaw部署过程中,又遇到了问题,提示错误:

Error: qmd.cmdwrapperresolvedbutnoexecutable/Nodeentrypointcouldberesolvedwithoutshellexecution.

意思是openclaw找到了qmd.cmd,但要运行它不能直接通过powershll或者cmd启动,也就是说一定要通过sh。

到这里,就有点抓狂,然后仔细解读了qmd的文件启动路径,整个过程如下:

  • • 在"PATH\npm\global"路径下有个qmd.cmd,这个文件的作用是利用sh来调用"PATH\npm\global\node_modules\@tobilu\qmd\bin"路径下的qmd文件
  • • "PATH\npm\global\node_modules\@tobilu\qmd\bin"路径下的qmd是用node来启用"PATH\npm\global\node_modules\@tobilu\qmd\dist\cli"路径下的qmd.js

非常的绕,要启动qmd.js,先用cmd调用sh,接着用sh调用node,就是这个逻辑。

所以针对版本2026.3.28的openclaw,"PATH/npm/global"路径下的qmd.cmd文件不能修改,因为它能调用sh.exe。

3.3 解决方法

如果不修改,openclaw能一致读取到"PATH\npm\global\node_modules\@tobilu\qmd\bin"路径下的qmd文件。

但是到这一步,openclaw就开始用node来读取"PATH\npm\global\node_modules\@tobilu\qmd\bin\qmd"了,所以,非常奇怪。

由于该路径下的qmd文件是Unix shell脚本,只适合用sh.exe来读取,node它读不了,在openclaw部署中,就会出现提示代码语言错误:

SyntaxError: Invalidorunexpectedtoken

所以,为了配合这个版本的openclaw,需要修改的是这个文件,改成JavaScript语言。

#!/usr/bin/env node
import { pathToFileURL } from 'url';
import { dirname, join } from 'path';
import { fileURLToPath } from 'url';

const__filename= fileURLToPath(import.meta.url);
const__dirname= dirname(__filename);

constDIR= dirname(__dirname);
constqmdJs= join(DIR, 'dist''cli''qmd.js');

// 使用 pathToFileURL 将 Windows 绝对路径转换为 file:// URL
import(pathToFileURL(qmdJs));

这样,openclaw就能部署qmd成功了,但是在cmd中就不能单独调用qmd了,也算是曲线救国吧。