☰
OpenClaw 彻底卸载指南:Linux、Windows、Docker 残留清理与验证
2026/9/26 4:48:30 网站建设 项目流程

圈子里管 OpenClaw 叫“龙虾”,不是因为它和海鲜有什么关系,纯粹是那个大钳子 Logo 太有辨识度了。跑 AI Agent 的人应该都懂它的分量:挂上 Telegram、Discord、飞书、Teams 这些聊天平台,配一个千问或者任意 OpenAI 兼容接口的模型,本地一键部署完,它就是一个 7x24 小时待命的私人助理。但跑过的人也清楚,这东西用起来有多爽,卸载时就有多痛。

我见过不止一个人卸载“龙虾”的动机千奇百怪:有人是受不了飞书输出老被截断,有人是反复撞上agent failed before reply: session file locked (timeout 60000ms)这个诡异报错,也有人只是对比了 WorkBuddy 这类工具之后觉得没必要继续养着了。但不管出于什么原因,如果你以为把它装进去的那个目录删掉就算完事,后面大概率会被各种残留折腾到崩溃。我写这份指南,就是把 OpenClaw 在 Linux、Windows、Docker(含飞牛 NAS)三类部署方式下应该怎么彻底、安全地卸载,一次讲透,带验证、带排错,直接照着抄作业就行。

1. 卸载前先看清“龙虾”的完整家底

1.1 为什么“删个文件夹”不等于卸载

OpenClaw 是典型的“看起来是一个程序,实际上是一套系统”。它的最小运行单位由一个常驻 Agent 进程(Node.js 运行时)、一个 Web 控制面板、一组 channel 连接器组成,而这些只是“运行时”。真正让卸载变难的是散落在系统里的那几类东西:

  • 安装目录:程序本体、依赖的 node_modules、MCP 服务定义文件。
  • 配置与数据目录:config.json、service-registry.json、会话记录、消息历史、附件。
  • 服务与自启项:Linux 下的 systemd unit、Windows 下的计划任务或服务项、Docker 里的容器和命名卷。
  • 外部授权:机器人的 Token、开放平台的回调地址、大模型 API Key。
  • 环境残留:PATH 写入、环境变量、npm 全局包、日志和锁文件。

类比一下:普通软件是背包客,卸载就是背起包走人;OpenClaw 是租房客,退租之后还要交钥匙、清家具、销户、解绑水电。它既然要挂接在各种 IM 平台上替你收发消息,就必须持有平台的会话凭证;既然要 7x24 常驻,就必须注册系统级自启;既然要处理多轮对话,就必须在本地落盘会话和锁。这些设计在安装时是能力,在卸载时全是债。

所以要彻底告别龙虾,第一步不是急着敲 rm 命令,而是先把这份家底盘清楚。路径因部署方式而异,但绕不开这几个位置,记住它们,后面每一步都会轻松很多。

1.2 卸载前必做的三件事:备份、停服、撤授权

我自己的经验是,新手卸载最容易犯两个错误:一个是删得太急,删完发现还要里面的历史会话;一个是删得太慢,服务还活着就开始删文件,导致“删不干净”或者中途报锁错误。正确顺序是三板斧。

第一,备份。把~/.openclaw整个目录打包一份放进别的位置。如果你是从早期版本升级上来的,可能还残留一个~/.clawd老目录,也一并打包。命令很简单:tar -czf openclaw-backup-$(date +%F).tar.gz ~/.openclaw。不要嫌它大,几 MB 到几百 MB 都是正常的。会话记录里可能存了你跟联系人的历史消息,这些删了就真没了。哪怕后面重装,有这份备份也能把配置和会话原样捞回来。

第二,停服。手工部署的 Linux 版先执行systemctl --user stop openclaw(或系统级sudo systemctl stop openclaw),Docker 版执行docker compose down,Windows 版先在任务管理器里结束 node 进程,或者从包管理工具的管理界面执行卸载。停服的意义在于释放会话文件锁,避免后面删锁文件时进程还在写。

第三,撤授权。这一步最容易被忽略,也最体现“安全版”的价值。OpenClaw 的配置文件里存放的都是明文密钥:大模型 API Key(你配置千问或 OpenAI 兼容接口时填的那个)、Telegram Bot Token、飞书机器人凭证、Teams 应用密钥。卸载后这些凭证还躺在硬盘上,如果这个目录被同步盘同步、被备份工具上传,等于把密钥交出去了。所以卸载前,建议去各平台把不再使用的令牌 revoke 掉,API Key 能重新生成的重新生成。宁可麻烦,不要赌。

提示:备份文件本身也含密钥,打包完记得chmod 600,或者放进加密容器,别随手丢在下载目录。

2. 不同安装方式的卸载实操:Linux / Windows / Docker

这一节按安装方式拆开讲。判断自己属于哪种,看两个线索:一是当初用哪条命令装的,二是现在系统里有什么痕迹。不确定的话,先把下面三个命令都跑一遍,靠结果对号入座:

which openclaw # 找 CLI systemctl list-units --all | grep -i claw # 找服务 docker ps -a | grep -i claw # 找容器

2.1 Linux 一键部署版:先拆 systemd 服务,再删目录

一键脚本(curl 管道安装)是目前 Linux 上最常见的部署方式,它把 OpenClaw 装进用户目录,同时注册一个 systemd 用户级服务。卸载分四步走。

第一步,找到并停掉服务。服务名一般是 openclaw 或 openclaw-agent,具体以systemctl --user status openclaw或ps aux | grep -i openclaw的结果为准。先停再禁:

systemctl --user stop openclaw systemctl --user disable openclaw

如果当初装成了系统级服务(安装脚本里加了 sudo),那就用sudo systemctl stop openclaw && sudo systemctl disable openclaw。为什么要先 disable?因为服务如果注册了开机自启,你这一步不禁掉,重启后它会自己爬起来,跟你的删除操作“赛跑”。

第二步,移除 service 文件并重载。用户级服务文件在~/.config/systemd/user/openclaw.service,系统级在/etc/systemd/system/openclaw.service。删掉后必须执行systemctl --user daemon-reload或sudo systemctl daemon-reload,否则 systemd 还记着旧状态,日志里会残留一堆错误提醒。

第三步,删除程序和配置数据。这一步可以一把清干净:

rm -rf ~/.openclaw rm -rf ~/.clawd

有人会问:能不能只删程序保留会话?可以,但后果是残留了一个“没有程序、只有数据”的目录,下次重装时它又会被当作旧配置加载,等于没卸干净。既然决定告别,就整目录删。

第四步,清掉 PATH 和环境变量残留。一键脚本通常会在~/.bashrc或~/.profile末尾追加一行export PATH="$HOME/.openclaw/bin:$PATH"之类的内容,卸载脚本不会自动移除。编辑这两个文件,手工删掉和 openclaw 相关的行。顺手用npm ls -g --depth=0 2>/dev/null | grep -i claw看看有没有全局 npm 包,有就npm uninstall -g <包名>移除。

2.2 Windows 版与 Windowshub 渠道的残留处理

Windows 上安装 OpenClaw 常见两条路:官方脚本手动装,以及通过 Windowshub 这类第三方包管理渠道装。先说结论:无论哪条路,卸载都别只依赖管理工具,必须人工复查三轮。

第一轮,进程与自启。打开任务管理器——详细信息——按名称排序,把命令行里带 openclaw 字样的 node.exe 进程全部结束。然后按 Win+R 输入services.msc,搜 openclaw 相关服务;再打开任务计划程序(Win+R 输 taskschd.msc),翻任务列表里名字含 claw 的计划任务。这两处是 Windows 上最常见的自启藏身处,漏掉任何一个都会导致“删完又复活”。

第二轮,文件和配置。OpenClaw 在 Windows 上的数据目录通常也在用户主目录下:%USERPROFILE%\.openclaw,部分版本把日志放进%LOCALAPPDATA%\openclaw,或者把服务配置放在C:\ProgramData\openclaw。卸载时全选删除。如果通过 Windowshub 装的,先回它的管理界面执行卸载,让它把注册表里的卸载项和快捷方式清掉,再由人工补刀上面这些目录。

第三轮,环境变量。右键“此电脑”——属性——高级系统设置——环境变量,在用户变量和系统变量里检查 PATH,把指向 openclaw 安装目录的条目删掉。别忘了检查%USERPROFILE%\.bashrc(如果你在 Windows 上开了 Git Bash 或 WSL 映射),里面可能也有类似的追加行。

2.3 Docker 与飞牛 NAS 版:容器、镜像、卷逐个清

Docker 部署是现在最“体面”的安装方式,因为它把数据都圈进了命名卷,卸载思路非常清晰:容器、镜像、卷,三层清空。

先找到容器。docker ps -a | grep -i openclaw看容器名,假设叫 openclaw。停止并删除容器:

docker rm -f openclaw

然后删镜像。docker images | grep -i openclaw拿到镜像 ID 或仓库名,执行docker rmi <镜像ID>。接下来看卷:

docker volume ls | grep -i openclaw docker volume rm <卷名>

卷这一步最容易漏。很多人删了容器就不管了,结果数据还占着磁盘,下次docker run只要卷名一致,全部数据立马复活。如果你当初是用 compose 部署的,在 compose 文件所在目录执行docker compose down --rmi all -v可以一把清掉容器、镜像和卷,省心很多。

飞牛 NAS(fnOS)上部署的,逻辑一样,只是多了界面操作路径:在 Docker 应用管理里找到 openclaw 容器,先停止再删除;再到镜像管理删镜像;最后到存储或卷管理删除对应数据卷。如果当初是通过 SSH 命令行部署的,直接按上面的命令处理。注意飞牛 NAS 的数据卷通常挂在指定的存储路径下,删除前先看清这个卷里有没有你要留的备份文件。

3. 配置、会话与锁文件的深度清理

3.1 配置文件里藏着哪些密钥

卸载“干净”和卸载“安全”是两回事。把服务和目录删了,是干净;把里面记录的凭证处理好,才是安全。这一节专门讲后者。

~/.openclaw/config.json(部分版本叫 openclaw.json)里至少包含这几类敏感信息:

  • 大模型 API Key:配置千问、通义、OpenAI 兼容端点时填的密钥,明文存放;
  • Channel Token:Telegram Bot Token、飞书机器人密钥、Teams 应用的 client secret;
  • 会话恢复信息:部分部署会把 channel 的 session 字符串(相当于登录态)写进配置或独立文件;
  • 服务注册信息:service-registry.json 里可能记录了 MCP 服务的访问凭证。

这些信息在卸载后不会自动消失。就算你把目录删了,它们也可能出现在备份压缩包里、vim 的交换文件里(比如.config.json.swp)、shell 历史里(如果你曾经用命令行传过 key)、以及系统日志里(如果跑过 debug 模式)。

所以“2026 安全版”卸载的额外一步是:卸载完成后,去对应平台重新生成或吊销这些密钥。具体动作:进入大模型开放平台把旧的 API Key 删除并重新创建;去 Telegram BotFather 或飞书开放平台停用对应机器人;Teams 的话去相应应用管理后台删除应用注册,同时把回调地址配置清掉。不要嫌麻烦,一次泄露事故的成本远高于这几个操作。

3.2 会话锁文件与“agent failed before reply”的关联

聊一个很多人问过的报错:agent failed before reply: session file locked (timeout 60000ms)。

这个报错的机制其实很简单。OpenClaw 用文件锁来保证同一个会话同一时间只能被一个 Agent 实例处理。Agent 启动、回复用户前,会先尝试对会话文件加锁;如果锁被别的进程持有,它就死等,默认 60 秒超时后放弃并回报这个错误。

你在什么情况下会撞到它?最常见三种:

  1. 上一次进程没有正常退出,残留了 stale lock 文件;
  2. 同时开了两个实例(比如 Docker 里一个、宿主机手动装的一个),两个进程抢同一个会话目录;
  3. systemd 服务还活着,你又手动启动了一个 CLI 实例。

卸载过程中撞到它的概率不低,尤其是你“边删边试”的时候。处理方法:

pkill -9 -f openclaw # 强制结束所有相关进程 ps aux | grep -i openclaw # 确认没有残留 find ~/.openclaw -name "*.lock" -delete # 删除锁文件

注意:find -delete前最好先find ~/.openclaw -name "*.lock"列出来看一眼,确认这些确实是锁文件而不是重要数据。反正你已经做过备份,这一步胆子可以大一点。

3.3 日志、缓存与全局依赖残留

最后一个容易忽略的区域:日志和缓存。OpenClaw 运行期间的日志默认写在~/.openclaw/logs/下,包含每个 channel 的收发记录、每次对话的请求耗时、偶尔还有调试模式下的完整请求内容——这些都是隐私数据,别留着。卸载时连目录一起删掉即可。

如果它跑在 Docker 里,宿主机的/var/lib/docker/containers/<容器ID>/下的日志文件不会被卷删除带走,但一般也不需要手动清,docker system prune -f可以顺带回收。不过要注意,docker system prune会把所有未使用的镜像和缓存都清掉,如果机器上还跑着别的容器,先评估好再执行。

另外,如果当初用 npm 全局安装过 CLI,记得npm uninstall -g对应包;用 yarn 或 pnpm 同理。最后查一下which openclaw和echo $PATH,确认命令行入口已经彻底消失。

4. 卸载完成后如何验证“真的干净了”

4.1 进程、端口、自启项核查清单

删完之后不要马上宣布胜利,跑一遍体检。下面是一份可以直接照抄的核查清单:

检查项Linux 命令期望结果
进程ps aux | grep -i openclaw无输出
端口ss -tlnp(按你配置的端口查)无对应监听
systemd 服务systemctl --user list-units --all | grep -i claw无记录
Docker 容器docker ps -a | grep -i claw无输出
Docker 镜像docker images | grep -i claw无输出
Docker 卷docker volume ls | grep -i claw无输出
文件目录ls -la ~/.openclaw ~/.clawd 2>/dev/null提示不存在
全局命令which openclaw找不到命令
自启项crontab -l | grep -i claw无输出

Windows 上的对应项:进程管理器里无 openclaw 进程;services.msc 无相关服务;任务计划程序无相关任务;环境变量 PATH 无相关条目。

端口这一项值得多说两句。OpenClaw 的 Web 控制面板默认端口不是固定值,取决于部署时的配置(常见 3000 或 3001)。体检时别死记数字,直接看监听列表,凡是可执行文件路径还指向 openclaw 安装目录的,都是漏网之鱼。

4.2 文件系统与 Docker 残留扫描

除了上面清单里的固定目录,还要扫一遍“散装残留”。先执行文件扫描:

sudo find /home /opt /usr/local/bin /etc/systemd/system /var/log -iname "*openclaw*" 2>/dev/null sudo find /home /opt /usr/local/bin /etc/systemd/system /var/log -iname "*clawd*" 2>/dev/null

不建议直接sudo find /全盘扫,机器上文件多的话会慢到怀疑人生。扫出/tmp下的临时文件顺手删掉;如果扫出/etc/sudoers.d/或/etc/security/limits.conf里的相关配置(个别安装脚本会改系统参数),按原格式移除。

Docker 侧扫描:

docker ps -a | grep -i claw docker images -a | grep -i claw docker volume ls | grep -i claw docker network ls | grep -i claw # 极少数部署会自建网络

网络这一行是我后来才加进去的。早期给别人收尾时总漏看自定义网络,容器删了、网络还在,虽然不影响使用,但docker network ls里留着一条 openclaw 相关网络看着就难受。验证通过后,docker network rm <网络名>顺手清掉。

5. 高频问题与排查技巧实录

5.1 “session file locked”反复出现:先找第二个实例

这个报错如果在你卸载过程中反复出现,大概率不是锁文件的问题,而是还有第二个实例在跑。我踩过的典型场景:Docker 容器没停,宿主机上手动装的进程又开着,两边共享同一个挂载目录,互相抢锁。出现这种情况,先docker ps看容器,再ps aux | grep -i openclaw看进程,把不同来源的实例全部停掉,再谈删锁文件。

如果是系统异常断电导致锁文件残留,但进程列表是空的,直接删锁文件就行。少数情况锁文件藏在会话子目录里,多查一种后缀更保险:

find ~/.openclaw -name "*.lock" -o -name "*.pid"

pid 文件同样要删。删完再启动一次验证,如果还报超时,八成是配置目录本身被多个实例共享,检查一下是不是有 NFS 或软链接指向了同一处。

5.2 服务被反复拉起和端口占用

删完目录、停掉服务,一刷新端口又被占——这种诡异现象多数是两类原因。

一类是 systemd 的 timer 或别名。有的安装脚本会把服务注册成openclaw-restart.timer,你只删了.service忘了.timer,它会按计划把服务重新拉起来。卸载时把名字带 claw 的 unit 全部列一遍:

systemctl --user list-unit-files | grep -i claw

service、timer、socket 一个都别留,全部 stop、disable,然后删文件、重载 daemon。

另一类是 Windows 上的计划任务,比如“开机启动 OpenClaw”或“每 10 分钟重启 openclaw”。删完进程后计划任务又把它拉起来,等你发现时它已经又跑了几轮。所以在任务计划程序里必须同时删“启动”和“守护”两类任务,只删启动类,守护类会在几分钟后打一个措手不及。

5.3 卸载后想重装:如何避免旧配置干扰

有些人是卸载后要装回某个更早的稳定版本,或者顺便换到 WorkBuddy 一类的替代工具。这时候最容易踩的坑是“旧目录复辟”。

只要你备份过~/.openclaw,重装前把解压出来的目录拷回去,老配置就会原样生效——听起来是好事,但这些旧配置里往往带着过时的 channel 凭证和会话锁。轻则启动报错,重则直接复用旧的机器人 Token,而你已经在平台侧吊销了它。

所以重装前的新习惯是:只恢复“配置模板”级别的内容,别整目录覆盖。比如先装好新版本,再把老的 config.json 拿到新目录外面,对照着把模型、channel、密钥一项一项填进去。历史会话该放下就放下,Agent 的会话连续性本来就不是它最值钱的部分。

还有一个细节:如果重装后发现飞书输出截断之类的老问题又回来了,别急着怪新版本——先确认 channel 配置里是不是沿用了旧的输出限制参数。这类问题通常是配置沿革,不是版本回归。

最后说点个人经验。现在再让我部署龙虾,我只会选 Docker 方式,不是因为 Docker 多高级,而是卸的时候一个docker compose down -v就能回到原点。手动装的那一套 systemd、环境变量、日志、锁文件,真的能把人逼疯。如果你正在卸载的路上,遇到session file locked别慌——把进程全杀掉、锁文件删掉,再回来按这份清单查一遍,基本都能收拾干净。还有个小技巧:卸载那天顺便把定期备份任务里涉及 openclaw 目录的条目也清掉,不然你删得再干净,备份脚本过几天又会把它“复活”到新的备份里,那才是真正的阴魂不散。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询