手把手教你用OpenClaw实现百度网盘自动备份(超详细教程)
一、背景与优势
1.1 为什么需要自动备份?
-
手动备份容易忘记,数据丢失风险高 -
百度网盘免费空间大,适合存备份文件 -
自动化备份可设置周期(每天/每周),低运维成本
1.2 OpenClaw实现优势
-
开源免费,支持自定义脚本 -
内置定时任务(Cron)功能,精准控制备份时间 -
可结合飞书/微信等渠道发送备份结果通知 -
支持增量备份、覆盖式备份等多种策略
二、前置准备
2.1 环境要求
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2.2 百度网盘技能(bdpan-storage)详细安装指南
步骤1:确认技能存在(避免名称错误)
# 先搜索ClawHub上的百度网盘技能,确认官方名称openclaw skills search bdpan# ✅ 正常输出应包含:bdpan-storage (百度网盘文件管理 Skill)# ❌ 若未找到:检查网络,或手动从 https://clawhub.com/skills/bdpan-storage 确认
步骤2:执行安装命令
# 从ClawHub安装官方百度网盘技能openclaw skills install bdpan-storage
安装过程预期输出:
正在从ClawHub下载技能包...解压到 ~/.openclaw/workspace/skills/bdpan-storage/安装完成,技能已激活!
步骤3:验证安装完整性
# 1. 检查技能目录结构(必须包含以下文件)ls -la ~/.openclaw/workspace/skills/bdpan-storage/# ✅ 必须包含:SKILL.md、scripts/、README.md(如有)# 2. 检查核心脚本是否存在(备份/上传/删除全靠这些)ls -la ~/.openclaw/workspace/skills/bdpan-storage/scripts/# ✅ 必须包含:bdpan-login.sh、bdpan-upload.sh、bdpan-ls.sh、bdpan-delete.sh# 3. 检查系统依赖(脚本运行的基础)which curl jq tar bash # 这四个命令必须都有输出# ❌ 缺少依赖解决:sudo apt-get install curl jq tar
步骤4:百度网盘授权
# 运行授权脚本(必须用bash执行,不要用sh)bash ~/.openclaw/workspace/skills/bdpan-storage/scripts/bdpan-login.sh
授权过程避坑点:
-
二维码不显示/无法识别
-
坑点:终端字体过小导致二维码模糊 → 放大终端字体(Ctrl+加号)或复制脚本输出的链接到浏览器打开 -
坑点:终端不支持显示图片 → 直接访问脚本输出的 https://pan.baidu.com/...链接授权 -
二维码5分钟过期
-
解决:重新运行 bdpan-login.sh生成新二维码,不要等 -
授权失败提示 authorization failed
-
原因1:网络无法访问百度网盘API → 测试: ping pan.baidu.com或curl https://pan.baidu.com -
原因2:旧授权缓存冲突 → 清除缓存: rm -rf ~/.bdpan-token后重新授权 -
权限报错 permission denied
-
解决:不要用 sh bdpan-login.sh(脚本含bash语法),推荐bash bdpan-login.sh
步骤5:验证授权成功
# 列出百度网盘根目录,确认授权生效bash ~/.openclaw/workspace/skills/bdpan-storage/scripts/bdpan-ls.sh /# ✅ 正常输出:显示根目录文件列表,无报错# ❌ 报错 `not logged in`:重新执行授权步骤
三、百度网盘技能安装避坑指南
|
|
|
|
|---|---|---|
openclaw: command not found |
|
export PATH=$PATH:~/.npm-global/bin |
bdpan-storage: skill not found |
|
openclaw skills search bdpan 确认名称,或手动下载技能包 |
bdpan-login.sh: No such file |
|
~/.openclaw/workspace/skills/bdpan-storage/ 后重新安装 |
curl: command not found |
|
sudo apt-get install curl |
jq: command not found |
|
sudo apt-get install jq |
bdpan-ls.sh 仍报错未登录 |
|
source ~/.bashr |
四、核心实现步骤(完整无省略)
4.1 编写备份脚本
我们创建两个备份脚本,分别用于增量备份和覆盖式备份,所有脚本存放到 /mnt/new_disk/scripts/(可自定义)。
脚本1:增量备份脚本(/mnt/new_disk/scripts/backup-to-bdpan.sh)
#!/bin/bashset -e # 遇到错误立即退出# ========= 配置区 =========LOCAL_DIR="$HOME/.openclaw/workspace"# 本地要备份的目录BDPAN_TARGET_DIR="/openclaw-backup/incremental"# 百度网盘目标目录LOG_FILE="/tmp/backup-to-bdpan.log"# 日志文件DATE=$(date +%Y-%m-%d_%H-%M-%S) # 当前时间戳(避免文件名重复)BACKUP_FILE="/tmp/openclaw-backup-$DATE.tar.gz"# 本地临时压缩包路径# ========= 初始化 =========echo"[$(date)] 开始增量备份..." >> $LOG_FILE# ========= 步骤1:检查本地目录是否存在 =========if [ ! -d "$LOCAL_DIR" ]; thenecho"[$(date)] 错误:本地目录 $LOCAL_DIR 不存在" >> $LOG_FILEexit 1fi# ========= 步骤2:创建本地压缩包 =========echo"[$(date)] 压缩本地文件到 $BACKUP_FILE" >> $LOG_FILEtar -czf $BACKUP_FILE -C $LOCAL_DIR . 2>> $LOG_FILE# 检查压缩包是否生成if [ ! -f "$BACKUP_FILE" ]; thenecho"[$(date)] 错误:压缩包生成失败" >> $LOG_FILEexit 1fiecho"[$(date)] 压缩完成,文件大小:$(du -h $BACKUP_FILE | cut -f1)" >> $LOG_FILE# ========= 步骤3:确保百度网盘目标目录存在 =========echo"[$(date)] 确保百度网盘目录 $BDPAN_TARGET_DIR 存在" >> $LOG_FILEbash ~/.openclaw/workspace/skills/bdpan-storage/scripts/bdpan-mkdir.sh $BDPAN_TARGET_DIR >> $LOG_FILE 2>&1 || true# ========= 步骤4:上传到百度网盘 =========echo"[$(date)] 上传压缩包到百度网盘 $BDPAN_TARGET_DIR" >> $LOG_FILEbash ~/.openclaw/workspace/skills/bdpan-storage/scripts/bdpan-upload.sh \$BACKUP_FILE \$BDPAN_TARGET_DIR/openclaw-backup-$DATE.tar.gz >> $LOG_FILE 2>&1# 检查上传是否成功(检查百度网盘是否存在该文件)echo"[$(date)] 验证上传结果..." >> $LOG_FILEbash ~/.openclaw/workspace/skills/bdpan-storage/scripts/bdpan-ls.sh \"$BDPAN_TARGET_DIR/openclaw-backup-$DATE.tar.gz" >> $LOG_FILE 2>&1# ========= 步骤5:清理本地临时文件 =========echo"[$(date)] 清理本地临时文件" >> $LOG_FILErm -f $BACKUP_FILEecho"[$(date)] 增量备份完成!文件已上传至 $BDPAN_TARGET_DIR/openclaw-backup-$DATE.tar.gz" >> $LOG_FILEexit 0
脚本2:覆盖式备份脚本
#!/bin/bashset -e # 遇到错误立即退出# ========= 配置区 =========LOCAL_DIR="$HOME/.openclaw/workspace"# 本地要备份的目录BDPAN_TARGET_DIR="/openclaw-backup/full"# 百度网盘目标目录LOG_FILE="/tmp/backup-openclaw.log"# 日志文件DATE=$(date +%Y-%m-%d) # 当前日期(用于文件名)BACKUP_FILE="/tmp/openclaw-full-backup-$DATE.tar.gz"# 本地临时压缩包路径# ========= 初始化 =========echo"[$(date)] 开始覆盖式备份..." >> $LOG_FILE# ========= 步骤1:检查本地目录 =========if [ ! -d "$LOCAL_DIR" ]; thenecho"[$(date)] 错误:本地目录 $LOCAL_DIR 不存在" >> $LOG_FILEexit 1fi# ========= 步骤2:压缩文件 =========echo"[$(date)] 压缩本地文件到 $BACKUP_FILE" >> $LOG_FILEtar -czf $BACKUP_FILE -C $LOCAL_DIR . 2>> $LOG_FILE# 检查压缩包if [ ! -f "$BACKUP_FILE" ]; thenecho"[$(date)] 错误:压缩包生成失败" >> $LOG_FILEexit 1fiecho"[$(date)] 压缩完成,文件大小:$(du -h $BACKUP_FILE | cut -f1)" >> $LOG_FILE# ========= 步骤3:删除百度网盘旧备份(保留最新1份) =========echo"[$(date)] 删除百度网盘旧备份..." >> $LOG_FILE# 列出旧备份文件,排除当前要上传的(如果存在)OLD_FILES=$(bash ~/.openclaw/workspace/skills/bdpan-storage/scripts/bdpan-ls.sh \"$BDPAN_TARGET_DIR/openclaw-full-backup-*.tar.gz" 2>/dev/null | grep -v "$DATE")if [ -n "$OLD_FILES" ]; thenecho"$OLD_FILES" | whileread -r old_file; doecho"[$(date)] 删除旧备份:$old_file" >> $LOG_FILE bash ~/.openclaw/workspace/skills/bdpan-storage/scripts/bdpan-delete.sh \"$old_file" >> $LOG_FILE 2>&1 || truedonefi# ========= 步骤4:上传新备份 =========echo"[$(date)] 上传新备份..." >> $LOG_FILE# 确保目标目录存在bash ~/.openclaw/workspace/skills/bdpan-storage/scripts/bdpan-mkdir.sh \$BDPAN_TARGET_DIR >> $LOG_FILE 2>&1 || truebash ~/.openclaw/workspace/skills/bdpan-storage/scripts/bdpan-upload.sh \$BACKUP_FILE \$BDPAN_TARGET_DIR/openclaw-full-backup-$DATE.tar.gz >> $LOG_FILE 2>&1# ========= 步骤5:清理本地临时文件 =========echo"[$(date)] 清理本地临时文件" >> $LOG_FILErm -f $BACKUP_FILEecho"[$(date)] 覆盖式备份完成!最新备份:$BDPAN_TARGET_DIR/openclaw-full-backup-$DATE.tar.gz" >> $LOG_FILEexit 0
给脚本添加执行权限
chmod +x /mnt/new_disk/scripts/backup-to-bdpan.shchmod +x /mnt/new_disk/scripts/backup-openclaw.sh
4.2 配置OpenClaw定时任务
OpenClaw的定时任务配置文件路径:~/.openclaw/cron/jobs.json
完整定时任务配置示例(包含增量+覆盖备份)
{"version":1,"jobs":[{"id":"xxx","name":"每周备份OpenClaw到百度网盘(增量)","enabled":true,"createdAtMs":1775920061119,"schedule":{"kind":"cron","expr":"0 0 * * 1","tz":"Asia/Shanghai"},"sessionTarget":"isolated","wakeMode":"now","payload":{"kind":"agentTurn","message":"执行 OpenClaw 增量备份任务:\n1. 运行备份脚本:bash /mnt/new_disk/scripts/backup-to-bdpan.sh\n2. 输出备份结果\n3. 如果失败,输出错误信息并通知","timeoutSeconds":300},"delivery":{"mode":"announce","channel":"feishu","to":"user:xxxx"}},{"id":"xxxx","name":"每周二全量备份OpenClaw(覆盖式)","enabled":true,"createdAtMs":1777654213011,"schedule":{"kind":"cron","expr":"0 0 * * 2","tz":"Asia/Shanghai"},"sessionTarget":"isolated","wakeMode":"now","payload":{"kind":"agentTurn","message":"执行OpenClaw全量备份(覆盖式):运行命令 bash /mnt/new_disk/scripts/backup-openclaw.sh,完成后用飞书通知备份结果。","timeoutSeconds":300},"delivery":{"mode":"announce","channel":"feishu","to":"user:xxxx"}}]}
Cron表达式详解
|
|
|
|
|
|
|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
常用Cron示例:
-
0 3 * * *:每天凌晨3点 -
0 12 * * 1-5:工作日中午12点 -
0 0 1 * *:每月1号凌晨12点
重启OpenClaw网关使配置生效
openclaw gateway restart# 检查任务是否加载openclaw cron list# 应该能看到刚才添加的两个备份任务
4.3 测试备份任务
手动执行脚本测试
# 测试增量备份脚本bash /mnt/new_disk/scripts/backup-to-bdpan.sh# 实时查看日志输出tail -f /tmp/backup-to-bdpan.log# 检查百度网盘是否收到文件bash ~/.openclaw/workspace/skills/bdpan-storage/scripts/bdpan-ls.sh /openclaw-backup/incremental
# 测试覆盖式备份脚本bash /mnt/new_disk/scripts/backup-openclaw.sh# 查看日志tail -f /tmp/backup-openclaw.log# 检查百度网盘是否只有最新一份备份bash ~/.openclaw/workspace/skills/bdpan-storage/scripts/bdpan-ls.sh /openclaw-backup/full
手动触发定时任务测试
# 立即执行增量备份任务(无需等Cron时间)openclaw cron run 53a3d57c-adba-4444-a8cb-63ac8a6d4be8# 查看任务执行状态openclaw cron status 53a3d57c-adba-4444-a8cb-63ac8a6d4be8# ✅ 状态应为:lastRunStatus: "success"# 立即执行覆盖式备份任务openclaw cron run c14999af-652b-4503-bd9a-d129b0644d88
五、监控与故障排查
5.1 查看执行日志
# OpenClaw网关日志(查看定时任务调度情况)tail -f /tmp/openclaw/openclaw-$(date +%Y-%m-%d).log# 增量备份脚本日志tail -f /tmp/backup-to-bdpan.log# 覆盖式备份脚本日志tail -f /tmp/backup-openclaw.log
5.2 常见错误排查
|
|
|
|
|---|---|---|
bdpan: not logged in |
|
bdpan-login.sh 扫码登录 |
permission denied |
|
chmod +x 脚本路径 |
cron: job not found |
|
openclaw cron list 确认任务ID |
gateway closed |
|
openclaw gateway start |
tar: file truncated |
|
|
upload failed: 413 |
|
|
六、扩展功能
6.1 添加飞书通知
定时任务的 delivery 字段已配置飞书通知:
"delivery":{"mode":"announce","channel":"feishu","to":"user:x'x'x'x"}
备份完成后会自动发送飞书消息通知你,包含成功/失败状态和日志摘要。
6.2 加密备份文件(可选)
在压缩前添加加密步骤(使用gpg):
# 安装gpgsudo apt-get install gpg# 修改备份脚本,在tar压缩后添加加密:gpg --batch --yes --passphrase '你的强密码' -c $BACKUP_FILE# 上传加密后的文件(.gpg后缀)bash ~/.openclaw/workspace/skills/bdpan-storage/scripts/bdpan-upload.sh \$BACKUP_FILE.gpg \$BDPAN_TARGET_DIR/openclaw-backup-$DATE.tar.gz.gpg
6.3 多目录备份
修改脚本的 LOCAL_DIR 变量,添加多个目录:
# 定义要备份的目录数组LOCAL_DIRS=("$HOME/.openclaw/workspace""/mnt/data/important""/etc/nginx")DATE=$(date +%Y-%m-%d)BACKUP_FILE="/tmp/openclaw-backup-$DATE.tar.gz"# 逐个打包目录tar -czf $BACKUP_FILE -C / $(echo"${LOCAL_DIRS[@]}" | sed 's|/||g') 2>> $LOG_FILE
6.4 日志轮转(防止日志文件过大)
添加日志轮转配置:
# 在脚本开头添加日志轮转逻辑if [ -f "$LOG_FILE" ] && [ $(stat -c%s "$LOG_FILE") -gt 10485760 ]; thenmv$LOG_FILE$LOG_FILE.oldtouch$LOG_FILEfi
七、注意事项(重要)
-
备份频率:重要数据建议每天备份,普通数据每周即可 -
保留策略:百度网盘免费用户建议只保留最近3份备份,避免空间不足 -
密码安全:加密密码不要写在脚本里,用环境变量存储: export BDPAN_ENCRYPT_PASS=你的密码 -
网络稳定:备份大文件时确保网络稳定,避免中断导致上传失败 -
定期验证:每月下载一次备份文件,验证是否可正常解压 -
权限控制:备份脚本仅root或当前用户可执行,避免其他用户篡改
夜雨聆风