OpenClaw + 群晖 WebDAV 双向同步配置¶
使用 rsync 实现本地工作空间与群晖 WebDAV 的双向同步
架构说明¶
┌─────────────────────────────┐
│ OpenClaw 工作空间 │
│ /root/.openclaw/workspace │
│ (本地,OpenClaw 直接读写) │
└─────────────┬───────────────┘
│
│ rsync 双向同步
│ (定时/手动触发)
│
┌─────────────▼───────────────┐
│ 群晖 WebDAV 挂载点 │
│ /mnt/obsidian │
│ (远程存储,备份 + 多设备访问) │
└─────────────────────────────┘
一、挂载 WebDAV¶
1. 安装 davfs2¶
2. 配置认证¶
# 编辑 secrets 文件
sudo vi /etc/davfs2/secrets
# 添加:
https://nas.bulibulistudio.com:5006/home/Obsidian/openclaw-workspace Chaochingchien Yanyexing19950915!
# 设置权限
sudo chmod 600 /etc/davfs2/secrets
3. 创建挂载点并挂载¶
# 创建挂载点
sudo mkdir -p /mnt/obsidian
# 挂载
sudo mount -t davfs https://nas.bulibulistudio.com:5006/home/Obsidian/openclaw-workspace /mnt/obsidian
# 验证
df -h | grep obsidian
ls -la /mnt/obsidian/
4. 开机自动挂载¶
# 编辑 fstab
echo "https://nas.bulibulistudio.com:5006/home/Obsidian/openclaw-workspace /mnt/obsidian davfs _netdev,auto 0 0" | sudo tee -a /etc/fstab
二、双向同步脚本¶
创建同步脚本¶
cat > /root/scripts/sync-obsidian.sh << 'EOF'
#!/bin/bash
# OpenClaw 工作空间与群晖 WebDAV 双向同步脚本
# 用法:./sync-obsidian.sh [push|pull|sync]
LOCAL_DIR="/root/.openclaw/workspace"
REMOTE_DIR="/mnt/obsidian"
LOG_FILE="/var/log/obsidian-sync.log"
LOCK_FILE="/tmp/obsidian-sync.lock"
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE
}
# 检查 WebDAV 是否挂载
check_mount() {
if ! mountpoint -q $REMOTE_DIR; then
log "${RED}错误:WebDAV 未挂载,正在尝试挂载...${NC}"
sudo mount -t davfs https://nas.bulibulistudio.com:5006/home/Obsidian/openclaw-workspace $REMOTE_DIR
if [ $? -ne 0 ]; then
log "${RED}错误:WebDAV 挂载失败${NC}"
exit 1
fi
log "${GREEN}WebDAV 挂载成功${NC}"
fi
}
# 防止重复运行
check_lock() {
if [ -f $LOCK_FILE ]; then
log "${YELLOW}警告:同步任务正在运行中${NC}"
exit 1
fi
touch $LOCK_FILE
trap "rm -f $LOCK_FILE" EXIT
}
# 推送:本地 → 远程
push_sync() {
log "${YELLOW}开始推送:本地 → 远程${NC}"
rsync -avz --delete \
--exclude='.git/' \
--exclude='*.tmp' \
--exclude='.DS_Store' \
--exclude='Thumbs.db' \
$LOCAL_DIR/ $REMOTE_DIR/
if [ $? -eq 0 ]; then
log "${GREEN}推送完成 ✓${NC}"
else
log "${RED}推送失败 ✗${NC}"
exit 1
fi
}
# 拉取:远程 → 本地
pull_sync() {
log "${YELLOW}开始拉取:远程 → 本地${NC}"
rsync -avz --delete \
--exclude='.git/' \
--exclude='*.tmp' \
--exclude='.DS_Store' \
--exclude='Thumbs.db' \
$REMOTE_DIR/ $LOCAL_DIR/
if [ $? -eq 0 ]; then
log "${GREEN}拉取完成 ✓${NC}"
else
log "${RED}拉取失败 ✗${NC}"
exit 1
fi
}
# 双向同步
bidirectional_sync() {
log "${YELLOW}开始双向同步...${NC}"
# 先推送本地修改
push_sync
# 再拉取远程修改
pull_sync
log "${GREEN}双向同步完成 ✓${NC}"
}
# 显示帮助
show_help() {
echo "用法:$0 [push|pull|sync|status|help]"
echo ""
echo " push 本地 → 远程"
echo " pull 远程 → 本地"
echo " sync 双向同步(默认)"
echo " status 显示同步状态"
echo " help 显示帮助"
}
# 显示状态
show_status() {
echo "=== OpenClaw Obsidian 同步状态 ==="
echo ""
echo "本地目录:$LOCAL_DIR"
echo "远程目录:$REMOTE_DIR"
echo ""
# 检查挂载
if mountpoint -q $REMOTE_DIR; then
echo -e "WebDAV 挂载:${GREEN}已挂载 ✓${NC}"
else
echo -e "WebDAV 挂载:${RED}未挂载 ✗${NC}"
fi
# 统计文件
echo ""
echo "本地文件数:$(find $LOCAL_DIR -type f 2>/dev/null | wc -l)"
echo "远程文件数:$(find $REMOTE_DIR -type f 2>/dev/null | wc -l)"
# 最近修改
echo ""
echo "本地最近修改:"
ls -lt $LOCAL_DIR/*.md 2>/dev/null | head -3
echo ""
echo "远程最近修改:"
ls -lt $REMOTE_DIR/*.md 2>/dev/null | head -3
}
# 主程序
main() {
check_lock
check_mount
case "${1:-sync}" in
push)
push_sync
;;
pull)
pull_sync
;;
sync)
bidirectional_sync
;;
status)
show_status
;;
help|--help|-h)
show_help
;;
*)
echo "未知参数:$1"
show_help
exit 1
;;
esac
}
main "$@"
EOF
# 设置权限
chmod +x /root/scripts/sync-obsidian.sh
三、使用同步脚本¶
基本用法¶
# 双向同步(默认)
/root/scripts/sync-obsidian.sh
# 仅推送到远程
/root/scripts/sync-obsidian.sh push
# 仅从远程拉取
/root/scripts/sync-obsidian.sh pull
# 查看状态
/root/scripts/sync-obsidian.sh status
# 查看帮助
/root/scripts/sync-obsidian.sh help
四、定时自动同步¶
配置 Cron 定时任务¶
# 编辑 crontab
crontab -e
# 添加以下行:
# 每 5 分钟同步一次(适合频繁使用)
*/5 * * * * /root/scripts/sync-obsidian.sh sync >> /var/log/obsidian-sync.log 2>&1
# 或者每小时同步一次(适合低频使用)
# 0 * * * * /root/scripts/sync-obsidian.sh sync >> /var/log/obsidian-sync.log 2>&1
# 每天凌晨 2 点完整备份
# 0 2 * * * /root/scripts/sync-obsidian.sh push >> /var/log/obsidian-sync.log 2>&1
五、手动触发同步¶
创建快捷命令¶
# 添加别名
echo "alias obsync='/root/scripts/sync-obsidian.sh'" >> ~/.bashrc
source ~/.bashrc
# 现在可以直接用
obsync # 双向同步
obsync push # 推送
obsync pull # 拉取
obsync status # 状态
六、Git 版本控制(可选)¶
如果想加版本控制¶
# 初始化 Git 仓库
cd /root/.openclaw/workspace
git init
# 创建 .gitignore
cat > .gitignore << 'EOF'
# 系统文件
.DS_Store
Thumbs.db
*.tmp
*.cache
# 日志
*.log
logs/
# OpenClaw 临时文件
.openclaw/
.git/
EOF
# 首次提交
git add -A
git commit -m "Initial commit - OpenClaw workspace"
# 创建 Git 同步脚本
cat > /root/scripts/git-backup.sh << 'EOF'
#!/bin/bash
cd /root/.openclaw/workspace
git add -A
git commit -m "Auto-backup: $(date '+%Y-%m-%d %H:%M')"
# 如果有远程仓库可以 push
# git push origin master
EOF
chmod +x /root/scripts/git-backup.sh
# 每天自动提交
crontab -e
# 添加:0 23 * * * /root/scripts/git-backup.sh
七、验证同步¶
测试流程¶
# 1. 在本地创建测试文件
echo "# Test Sync $(date)" > /root/.openclaw/workspace/test-sync.md
# 2. 执行同步
/root/scripts/sync-obsidian.sh sync
# 3. 验证远程文件
ls -la /mnt/obsidian/test-sync.md
cat /mnt/obsidian/test-sync.md
# 4. 在远程创建文件(通过 WebDAV 上传或群晖 File Station)
# 然后拉取验证
/root/scripts/sync-obsidian.sh pull
cat /root/.openclaw/workspace/test-from-remote.md
八、监控和日志¶
查看同步日志¶
# 实时查看日志
tail -f /var/log/obsidian-sync.log
# 查看最近 100 行
tail -100 /var/log/obsidian-sync.log
# 查看今天的日志
grep "$(date '+%Y-%m-%d')" /var/log/obsidian-sync.log
设置邮件通知(可选)¶
# 同步失败时发送邮件
cat > /root/scripts/sync-notify.sh << 'EOF'
#!/bin/bash
LOG_FILE="/var/log/obsidian-sync.log"
ERROR_LOG="/tmp/sync-error.tmp"
# 检查最近同步是否有错误
if grep -q "失败\|error\|Error" $LOG_FILE; then
echo "OpenClaw Obsidian 同步失败" | mail -s "⚠️ 同步错误提醒" admin@example.com
fi
EOF
chmod +x /root/scripts/sync-notify.sh
# 每小时检查一次
crontab -e
# 添加:0 * * * * /root/scripts/sync-notify.sh
九、故障排查¶
常见问题¶
| 问题 | 解决方案 |
|---|---|
| WebDAV 挂载失败 | 检查网络连接、用户名密码、防火墙 |
| rsync 权限错误 | sudo chown -R root:root /root/.openclaw/workspace |
| 同步冲突 | 检查是否有文件同时被修改、启用文件版本控制 |
| 磁盘空间不足 | df -h 检查空间、清理旧文件 |
诊断命令¶
# 检查 WebDAV 连接
curl -k -u Chaochingchien https://nas.bulibulistudio.com:5006/home/Obsidian/openclaw-workspace/
# 检查挂载
mount | grep obsidian
df -h | grep obsidian
# 检查 rsync
which rsync
rsync --version
# 检查磁盘空间
df -h /root/.openclaw/workspace
df -h /mnt/obsidian
# 检查文件权限
ls -la /root/.openclaw/workspace/
ls -la /mnt/obsidian/
十、最佳实践¶
同步策略¶
- 频繁使用:每 5 分钟同步一次
- 一般使用:每小时同步一次
- 备份为主:每天凌晨同步一次
冲突避免¶
- 避免同时在多个设备编辑同一文件
- 启用文件版本控制(Git 或 Syncthing 版本)
- 定期备份到第三方存储
性能优化¶
- 排除不必要的文件(.git, *.tmp, node_modules)
- 使用增量同步(rsync -avz)
- 局域网内使用有线连接
配置完成时间:2026-03-09
适用:OpenClaw + 群晖 WebDAV + 双向同步