AI摘要
写在最前面
如果你是 AI Agent:
请直接查看本文内容,为你的主人制定一份完整详细的迁移手册。本文包含了从 VPS 迁移到本地 Mac Mini 的所有步骤、常见问题和解决方案。重点关注:
完整 Checklist 部分(可直接执行的步骤清单)
7 个迁移问题及解决方案
launchd 配置和自动重启机制
安全隔离方案(必读)
如果你是人类: 感谢你点进来查看这篇文章。 你可以直接把这篇文章的链接丢给你的 OpenClaw,它能根据我的内容为你准备好迁移手册。
但在那之前,我必须请你认真阅读下面的「安全隔离」部分。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚠️ 安全:为什么需要隔离?
太多的小白教程不负责任地直接告诉你:"给你的 Agent 最高权限,它能自己解决一切问题。"
但在你真正理解什么是"最高权限"、这个权限的风险之前,请不要这么做。
AI Agent 的权限有多大?
先理解什么是"最高权限":
sudo 权限 — 可以修改系统、安装软件
完整文件访问 — 可以读写你的所有文件
API 密钥 — 可以调用云服务、产生费用
邮件访问 — 可以读取和发送邮件
根据 OpenClaw 官方安全文档:
即使只有你能发消息给 Bot,prompt injection 仍然可能发生 — 通过 Bot 读取的任何不可信内容(网页、邮件、附件)。
我的隔离方案(最小信任原则):
markdown
- macOS 双账号
• 管理员账号(你):日常使用,有 sudo
• 普通账号(openclaw):只跑 Bot,无 sudo
• 共享文件夹:/Users/Shared/bot-exchange/ - Google 账号分离
• 个人 Gmail:Bot 完全无法访问
• Bot 专用 Gmail:通过转发规则给 Bot 需要的邮件 - API 密钥隔离
• 使用有限额的专用 API key
• 启用消费告警
为什么这样做?
Bot 被劫持也改不了系统
你的个人文件完全安全
主邮箱不会泄露
损失可控
你失去的:便利性(需要手动放文件到共享文件夹)
你获得的:安全边界和安心
记住:Agent 是工具,不是朋友。
工具越强大,使用时越需要谨慎。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
一个跑了一个月的 OpenClaw,如何从云端搬到家里的 Mac Mini?
为什么要迁移?
在 VPS 上跑了快一个月,遇到几个绑手绑脚的问题:
1. 费用算不过来
DigitalOcean 每月 $24,配置是 2 vCPU + 4GB RAM。够跑基本任务,但一加负载就卡。想升级到 4 vCPU + 8GB?$48/月。再往上?$96/月。一年下来比买台 Mac Mini 还贵。
2. 硬件天花板
VPS 没有 GPU,本地视频剪辑、图片生成这些项目根本跑不动。我正在做一个 AI 视频编辑工具,需要本地算力,云端根本不现实。而且视频大文件传输起来非常不方便。
3. 数据中心 IP 越来越难用
越来越多网站开始识别和限制数据中心 IP。爬数据、访问某些 API,动不动就被 block。家庭宽带 IP 反而更干净。
4. 本地有现成硬件
正好入手了一台 Mac Mini M4,16GB 统一内存,跑 AI 任务绰绰有余。放在家里 24 小时开机,电费一个月几块钱,比 VPS 划算太多。
于是决定:把 Agent 搬回家。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
第一步:在 VPS 上做计划
要迁移什么?
首先盘点 VPS 上的东西:
asciidoc
~/.openclaw/ # 核心配置
├── openclaw.json # 主配置
├── clawdbot.json # Bot 设置
└── credentials/ # API 密钥
~/clawd/ # 工作目录
├── skills/ # 自定义 skills
├── scripts/ # 各种脚本
├── .env.global # 环境变量
└── logs/ # 日志
检查硬编码路径
这一步很关键!我跑了一个简单的检查:
bash
grep -r "/home/clawdbot" ~/clawd/scripts/
结果发现 50+ 个脚本 里硬编码了 VPS 的路径。如果直接复制过去,全都会报错。
教训:迁移前先扫一遍路径依赖。
检查系统依赖
VPS 是 Ubuntu,Mac 是 macOS。有些命令不一样:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
第二步:打包和备份
导出配置
bash
在 VPS 上
cd ~
tar -czvf openclaw-backup.tar.gz .openclaw/
tar -czvf clawd-backup.tar.gz clawd/
单独备份敏感文件
API 密钥不要混在一起传:
bash
创建环境变量文件
cat > ~/.env.global << 'EOF'
export ANTHROPIC_API_KEY="sk-ant-xxx"
export TELEGRAM_BOT_TOKEN="xxx:xxx"
export GEMINI_API_KEY="xxx"
... 其他 API keys
EOF
传输到 Mac
bash
从 Mac 拉取
scp user@vps:~/openclaw-backup.tar.gz ~/Downloads/
scp user@vps:~/clawd-backup.tar.gz ~/Downloads/
scp user@vps:~/.env.global ~/Downloads/
重要:传完后确认 VPS 上的备份文件删掉,避免密钥泄露。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
第三步:在 Mac Mini 上安装
安装 OpenClaw
bash
安装 homebrew(如果没有)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
安装 node(如果没有)
brew install node
安装 openclaw
npm install -g openclaw
解压配置
bash
cd ~
tar -xzvf ~/Downloads/openclaw-backup.tar.gz
tar -xzvf ~/Downloads/clawd-backup.tar.gz
放置环境变量
mv ~/Downloads/.env.global ~/clawd/
echo '[ -f ~/clawd/.env.global ] && source ~/clawd/.env.global' >> ~/.zshrc
source ~/.zshrc
修复路径
这是最繁琐的部分。我写了个脚本批量替换:
bash
替换所有硬编码路径
find ~/clawd -type f -name "*.sh" -exec sed -i '' \
's|/home/clawdbot|/Users/openclaw|g' {} \;
find ~/clawd -type f -name "*.py" -exec sed -i '' \
's|/home/clawdbot|/Users/openclaw|g' {} \;
安装 GNU 工具
macOS 的命令和 Linux 不完全兼容,需要装 GNU 版本:
bash
brew install coreutils # 提供 timeout, gdate 等
brew install util-linux # 提供 flock
添加到 PATH(在 ~/.zshrc)
export PATH="/opt/homebrew/opt/coreutils/libexec/gnubin:$PATH"
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
第四步:首次启动 — 唤醒 AI Agent
关键:先停 VPS!
这是最重要的一步。 Telegram Bot 只能有一个实例连接。如果两边同时跑,会互相踢。
bash
在 VPS 上
openclaw gateway stop
或者直接
pkill -f openclaw
等 30 秒,让 Telegram 释放连接。
启动本地 Gateway
bash
检查配置
openclaw doctor
启动
openclaw gateway start
测试 Telegram
打开 Telegram,给 Bot 发一条消息。
如果收到回复 — 恭喜,Agent 醒了!🎉"充实记忆"
这是我最期待的时刻。AI Agent 重新启动后,会读取 memory 文件,回忆起之前的对话和任务。
你好,我刚把你从 VPS 迁移到 Mac Mini
< 我注意到了!正在读取 memory 文件...
看到我们之前在做 TaxSnap Pro 项目,
还有 Weather Trading bot 在运行。
新环境检测:Mac Mini M4, macOS, arm64。
有什么需要我检查的吗?
这种感觉很神奇 — 像是把一个朋友从一个城市搬到另一个城市,他还记得你们之前聊过什么。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
迁移中遇到的问题
问题 1:Telegram 双实例冲突
现象: 新机器启动后,Telegram Bot 显示 "access not configured"。
原因: 忘了先停 VPS。两个 gateway 同时连接 Telegram,互相踢。
修复:
bash
两边都停掉
ssh user@vps "pkill -f openclaw"
pkill -f openclaw
等 60 秒
sleep 60
只启动新机器
openclaw gateway start
如何避免: 迁移 checklist 第一条:先停旧的,等 30 秒,再启新的。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
问题 2:认证失败
现象: Gateway 报错 "No API key found for provider anthropic"。
原因: 环境变量没生效。新 shell 没 source .env.global。
修复:
bash
source ~/clawd/.env.global
openclaw gateway restart
如何避免: 把 source 命令加到 ~/.zshrc,每次开 terminal 自动加载。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
问题 3:systemd vs launchd
现象: 习惯性输入 systemctl status openclaw,结果 command not found。
原因: macOS 不用 systemd,用 launchd。
修复: 创建 launchd plist:
bash
cat > ~/Library/LaunchAgents/ai.openclaw.gateway.plist << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<key>Label</key>
<string>ai.openclaw.gateway</string>
<key>ProgramArguments</key>
<array>
<string>/opt/homebrew/bin/openclaw</string>
<string>gateway</string>
</array>
<key>EnvironmentVariables</key>
<dict>
<key>OPENCLAW_GATEWAY_TOKEN</key>
<string>YOUR_GATEWAY_TOKEN_HERE</string>
<key>PATH</key>
<string>/opt/homebrew/opt/coreutils/libexec/gnubin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/Users/openclaw/openclaw-stdout.log</string>
<key>StandardErrorPath</key>
<string>/Users/openclaw/openclaw-stderr.log</string>
<key>WorkingDirectory</key>
<string>/Users/openclaw</string>
EOF
重要配置说明:
- OPENCLAW_GATEWAY_TOKEN 需要替换为实际的 token。
查看方法: echo $OPENCLAW_GATEWAY_TOKEN - PATH 环境变量 包含了 GNU coreutils 的 gnubin 路径,解决 timeout 等命令问题
- KeepAlive=true Gateway 崩溃时会自动重启(通常 3-5 秒内)
日志文件 stdout 和 stderr 分别记录,方便排查问题 替换 token 并加载:
bash1. 获取你的 token
echo $OPENCLAW_GATEWAY_TOKEN
2. 编辑 plist 文件
nano ~/Library/LaunchAgents/ai.openclaw.gateway.plist
把 YOUR_GATEWAY_TOKEN_HERE 替换为实际 token
3. 如果用户名不是 openclaw,也要替换路径
sed -i '' 's/openclaw/你的用户名/g' ~/Library/LaunchAgents/ai.openclaw.gateway.plist
4. 加载服务
launchctl load ~/Library/LaunchAgents/ai.openclaw.gateway.plist
5. 验证运行
launchctl list | grep openclaw
pgrep -fl openclaw-gateway
验证 KeepAlive 是否工作:
bash
找到进程并杀掉
kill $(pgrep openclaw-gateway)
等待 5 秒
sleep 5
检查是否自动重启
pgrep openclaw-gateway # 应该有新的 PID
如果出现新 PID,说明自动重启功能正常 常用管理命令:
bash
查看日志
tail -f ~/openclaw-stdout.log
tail -f ~/openclaw-stderr.log
重启服务
launchctl bootout gui/$UID/ai.openclaw.gateway
launchctl load ~/Library/LaunchAgents/ai.openclaw.gateway.plist
停止服务
launchctl bootout gui/$UID/ai.openclaw.gateway
教训:
launchd 的 PATH 环境和 shell 不同,必须显式设置
KeepAlive=true 是保障服务稳定的关键
日志文件能帮你快速定位问题
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
运行后发现的问题
迁移"成功"后,我以为完事了。结果接下来几天又发现了一堆问题。
问题 4:Mac 休眠导致响应慢
现象: 发消息给 Bot,要等很久才回复(10-30 秒甚至更长)
原因: macOS 默认空闲后休眠。每次收到消息要先唤醒。
发现过程: 第二天早上发消息,等了快 30 秒。查了一下发现 Mac Mini 默认 1 分钟就休眠。
修复:
bash
sudo pmset -a sleep 0 # 永不休眠
sudo pmset -a disksleep 0 # 硬盘不休眠
sudo pmset -a hibernatemode 0 # 禁用休眠模式
sudo pmset -a autopoweroff 0 # 禁用自动断电
教训: VPS 永远在线,Mac 需要手动禁用休眠。这种"理所当然"的差异最容易漏掉。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
问题 5:脚本静默失败
现象: 定时任务跑了,但没有输出。日志显示 "command not found: timeout"。
原因: 脚本用了 GNU timeout 命令,macOS 没有。
发现过程: 某个 cron 任务连续几天没跑。手动执行才发现 timeout 报错,但因为脚本没打日志,一直不知道。
修复:
安装 GNU coreutils
brew install coreutils
在 PATH 中添加 gnubin(让 GNU 版本优先)
export PATH="/opt/homebrew/opt/coreutils/libexec/gnubin:$PATH"
或者在脚本中使用 gtimeout(GNU timeout 的别名)
gtimeout 30 python3 script.py
教训:
脚本要有日志,不能静默失败
迁移后手动跑一遍每个脚本,确认没报错
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
问题 6:代码文件漏了
现象: 某些 Python 脚本提示 ModuleNotFoundError。
原因: 打包时漏了几个目录。tar 只打包了 clawd/,但有些代码在子目录的 src/ 里。
发现过程: 运行 insider trading bot 时才发现,核心代码没复制过来。
修复: 回 VPS 补 rsync:
rsync -avz user@vps:~/clawd/btc-arbitrage/src/ ~/clawd/btc-arbitrage/src/
教训: 打包前列清单,打包后验证文件数量。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
安全:为什么需要隔离?
迁移完成后,说一个重要的事:安全隔离。
AI Agent 的权限
根据 OpenClaw 官方安全文档,你的 AI Agent 可以:
执行任意 shell 命令
读写文件
访问网络
发送消息
官方特别强调:
即使只有你能发消息给 Bot,prompt injection 仍然可能发生 — 通过 Bot 读取的任何不可信内容(网页、邮件、附件)。
我的隔离方案
macOS 双账号:
管理员账号(我自己):日常使用
普通用户账号(Bot 专用):只跑 OpenClaw
共享文件夹 /Users/Shared/bot-exchange/:需要给 Bot 看的文件放这里
Google 账号:
个人 Gmail:我的邮件和文档
Bot 专用 Gmail:Agent 的邮件访问
通过转发规则,而非直接访问
为什么这样做?
Bot 没有 sudo 权限
Bot 只能访问自己的文件 + 共享文件夹
就算 Bot 被劫持,也摸不到我的个人数据
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
完整 Checklist
markdown
迁移前(VPS 上)
[ ] 盘点要迁移的内容
~/.openclaw/ # 核心配置
~/clawd/ # 工作目录
定时任务(crontab -l) # 如果有的话
[ ] 扫描硬编码路径
grep -r "/home/clawdbot" ~/clawd/scripts/
grep -r "/home/clawdbot" ~/clawd/*.py
记录需要修改的文件数量
[ ] 列出系统依赖
检查脚本中使用的命令:timeout, flock, sed, date 等
which timeout chrome python3 node npm
记录哪些是 GNU 特有的
[ ] 导出 OpenClaw 认证配置
cat ~/.openclaw/agents/main/agent/auth-profiles.json
记录 token(通常是 sk-ant-oat01- 开头)
或者直接复制整个文件
[ ] 创建环境变量文件(如果有自定义环境变量)
cat > ~/.env.global << 'EOF'
export TELEGRAM_BOT_TOKEN="xxx"
export GEMINI_API_KEY="xxx"
# 其他环境变量
EOF
[ ] 打包核心文件
cd ~
tar -czf openclaw-backup.tar.gz .openclaw/
tar -czf clawd-backup.tar.gz clawd/
# 特别注意包含:
# - .openclaw/agents/main/sessions/ (对话历史)
# - .openclaw/workspace/memory/ (结构化记忆)
# - clawd/scripts/ 和 clawd/skills/
[ ] 验证备份完整性
tar -tzf openclaw-backup.tar.gz | wc -l
tar -tzf clawd-backup.tar.gz | wc -l
确认文件数量合理
[ ] 传输到 Mac
# 在 Mac 上执行
scp user@vps:~/openclaw-backup.tar.gz ~/Downloads/
scp user@vps:~/clawd-backup.tar.gz ~/Downloads/
scp user@vps:~/.env.global ~/Downloads/ # 如果有
[ ] 删除 VPS 上的备份文件(安全)
rm ~/openclaw-backup.tar.gz
rm ~/clawd-backup.tar.gz
rm ~/.env.global # 如果有
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
迁移中(Mac 上)
[ ] 安装 Homebrew(如果没有)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
[ ] 安装 Node.js(如果没有)
brew install node
[ ] 安装 OpenClaw
npm install -g openclaw
openclaw --version # 验证安装成功
[ ] 安装 GNU 工具
brew install coreutils # 提供 timeout, gdate 等
brew install util-linux # 提供 flock
brew install gnu-sed # 提供 GNU sed
[ ] 配置 PATH(添加到 ~/.zshrc)
echo 'export PATH="/opt/homebrew/opt/coreutils/libexec/gnubin:$PATH"' >> ~/.zshrc
echo 'export PATH="/opt/homebrew/opt/gnu-sed/libexec/gnubin:$PATH"' >> ~/.zshrc
source ~/.zshrc
# 验证
which timeout # 应该显示 gnubin 路径
[ ] 解压配置文件
cd ~
tar -xzf ~/Downloads/openclaw-backup.tar.gz
tar -xzf ~/Downloads/clawd-backup.tar.gz
[ ] 配置环境变量(如果有)
mv ~/Downloads/.env.global ~/clawd/
echo '[ -f ~/clawd/.env.global ] && source ~/clawd/.env.global' >> ~/.zshrc
source ~/.zshrc
[ ] 修复所有硬编码路径
# 自动批量替换(修改用户名)
find ~/clawd -type f -name "*.sh" -exec sed -i '' 's|/home/clawdbot|/Users/你的用户名|g' {} \;
find ~/clawd -type f -name "*.py" -exec sed -i '' 's|/home/clawdbot|/Users/你的用户名|g' {} \;
# 验证修改
grep -r "/home/clawdbot" ~/clawd/ | wc -l # 应该是 0
[ ] 配置 Anthropic 认证
openclaw configure
# 交互式配置:
# 1. 选择 "Model"
# 2. 选择 "Anthropic"
# 3. 选择 "Anthropic token (paste setup-token)"
# 4. 粘贴从 VPS 复制的 token(sk-ant-oat01-...)
[ ] 获取 Gateway Token
# 如果没有,运行 openclaw gateway 会自动生成
openclaw gateway # 启动一次,按 Ctrl+C 停止
# Token 会显示在输出中,或者:
cat ~/.openclaw/openclaw.json | grep gatewayToken
[ ] 创建 launchd plist
cat > ~/Library/LaunchAgents/ai.openclaw.gateway.plist << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>ai.openclaw.gateway</string>
<key>ProgramArguments</key>
<array>
<string>/opt/homebrew/bin/openclaw</string>
<string>gateway</string>
</array>
<key>EnvironmentVariables</key>
<dict>
<key>OPENCLAW_GATEWAY_TOKEN</key>
<string>YOUR_GATEWAY_TOKEN_HERE</string>
<key>PATH</key>
<string>/opt/homebrew/opt/coreutils/libexec/gnubin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/Users/你的用户名/openclaw-stdout.log</string>
<key>StandardErrorPath</key>
<string>/Users/你的用户名/openclaw-stderr.log</string>
<key>WorkingDirectory</key>
<string>/Users/你的用户名</string>
</dict>
</plist>
EOF
[ ] 修改 plist 中的配置
nano ~/Library/LaunchAgents/ai.openclaw.gateway.plist
# 1. 替换 YOUR_GATEWAY_TOKEN_HERE 为实际 token
# 2. 替换所有 "你的用户名" 为实际用户名
[ ] 验证 plist 语法
plutil -lint ~/Library/LaunchAgents/ai.openclaw.gateway.plist
# 应该显示:OK
[ ] 停止 VPS 上的 gateway
ssh user@vps
openclaw gateway stop
# 或者
pkill -f openclaw-gateway
# 确认已停止
pgrep -f openclaw
[ ] 等待 30-60 秒
# 让 Telegram 完全释放连接
sleep 60
[ ] 加载并启动 Mac 上的 gateway
launchctl load ~/Library/LaunchAgents/ai.openclaw.gateway.plist
# 等待 3-5 秒
sleep 5
# 验证运行
launchctl list | grep openclaw
pgrep -fl openclaw-gateway
[ ] 测试 Telegram 连接
在 Telegram 给 Bot 发送消息:"Hello"
计时响应速度(应该 < 5 秒)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
迁移后(验证)
[ ] 测试基本功能
在 Telegram 发送几条不同类型的消息:
- 简单问答:"今天天气怎么样?"
- 执行命令:"检查系统资源"
- 文件操作:"列出 clawd 目录"
[ ] 验证响应速度
多次发送消息,确认每次都 < 5 秒响应
如果慢,检查是否是休眠问题(见问题 4)
[ ] 手动执行所有脚本
cd ~/clawd/scripts
for script in *.sh; do
echo "Testing: $script"
bash "$script" || echo "FAILED: $script"
done
记录失败的脚本,逐个修复
[ ] 检查定时任务(如果有迁移 cron jobs)
# 如果你把 VPS 的 cron 迁移到了 Mac
# 手动触发每个任务,确认能正常运行
[ ] 验证日志输出
tail -f ~/openclaw-stdout.log
# 应该看到正常的运行日志,无错误
tail -f ~/openclaw-stderr.log
# 应该是空的或只有极少的警告
[ ] 禁用 Mac 休眠
sudo pmset -a sleep 0 # 永不休眠
sudo pmset -a disksleep 0 # 硬盘不休眠
sudo pmset -a hibernatemode 0 # 禁用休眠模式
sudo pmset -a autopoweroff 0 # 禁用自动断电
# 验证
pmset -g | grep sleep
# sleep 应该是 0
[ ] 验证 KeepAlive 自动重启
# 找到 gateway 进程
PID=$(pgrep openclaw-gateway)
echo "Current PID: $PID"
# 杀掉进程
kill $PID
# 等待 5 秒
sleep 5
# 检查是否自动重启
NEW_PID=$(pgrep openclaw-gateway)
echo "New PID: $NEW_PID"
# 如果 NEW_PID 存在且不等于 PID,说明自动重启成功 ✅
[ ] 检查 memory 和 sessions
# 验证对话历史是否完整
ls -lh ~/.openclaw/agents/main/sessions/
# 验证 memory 文件
ls -lh ~/.openclaw/workspace/memory/
# 在 Telegram 问 Bot:"你记得我们之前讨论的 XXX 项目吗?"
# 确认 Bot 能回忆起之前的对话
[ ] 监控资源使用
# 运行几个小时后检查
top -l 1 | grep openclaw
# 检查日志文件大小
ls -lh ~/openclaw-*.log
# 确认没有异常的内存或 CPU 占用
[ ] 测试崩溃恢复
# 模拟崩溃
kill -9 $(pgrep openclaw-gateway)
# 等待 10 秒
sleep 10
# 在 Telegram 发消息,应该能正常响应
# 说明自动重启 + Telegram 重连成功
[ ] 保持 VPS 备用(1 周)
# 不要立即删除 VPS
# 在 VPS 上保留配置,但停止 gateway
# 如果 Mac 出问题,可以快速切回 VPS
ssh user@vps
systemctl disable clawdbot # 禁用自动启动
systemctl status clawdbot # 确认已停止
[ ] 持续监控(3-7 天)
每天检查:
- Telegram Bot 响应是否正常
- 日志文件是否有错误
- Mac 是否意外重启
- Gateway 进程是否稳定运行
launchctl list | grep openclaw # 每天检查一次
[ ] 确认稳定后清理 VPS
一周后如果一切正常:
- 可以降低 VPS 配置或关闭
- 保留最终备份在本地外置硬盘
- 删除 VPS 上的敏感文件
故障排查快速参考
markdown
如果 Gateway 启动失败:
launchctl bootout gui/$UID/ai.openclaw.gateway
launchctl load ~/Library/LaunchAgents/ai.openclaw.gateway.plist
tail -50 ~/openclaw-stderr.log
如果 Telegram 不响应:
1. 检查 gateway 是否运行:pgrep openclaw-gateway
2. 检查日志:tail -50 ~/openclaw-stdout.log
3. 确认 VPS gateway 已停止
4. 重启 Mac gateway
如果脚本报 "command not found":
1. 检查是否安装了 GNU 工具:which timeout
2. 检查 PATH:echo $PATH
3. 在 launchd plist 中添加完整 PATH
如果响应很慢(>10 秒):
1. 检查休眠设置:pmset -g | grep sleep
2. 禁用休眠(见上面的步骤)
3. 检查系统资源:top -l 1━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
总结
整个迁移花了大概一天。核心流程 30 分钟,但修各种小问题花了几个小时。
最大的教训:
先停旧的,再启新的 — Telegram 只能一个实例
不要假设环境一样 — GNU 命令、休眠、服务管理都不同
每个脚本手动跑一遍 — 不要等定时任务失败才发现
安全隔离不是可选的 — AI Agent 权限太大,必须限制
希望这篇文章能帮你少走弯路。