3分钟上手思源笔记备份自动化:从脚本到定时任务全攻略
你是否曾因电脑故障丢失数周整理的笔记?是否在多设备间同步时遭遇过文件冲突?思源笔记(Siyuan Note)作为一款注重隐私的本地知识库软件,其数据安全完全依赖用户的备份策略。本文将通过脚本工具+定时任务+云同步三重方案,帮你构建零丢失的笔记保护系统,所有方案基于项目内置工具与开源脚本实现。
备份前必须知道的核心原理
思源笔记的数据存储采用分层结构,核心文件位于工作空间的data/目录下,包含笔记内容、附件和索引文件。项目官方明确指出:禁止使用第三方同步盘直接同步数据目录(README.md第337行),这会导致SQLite数据库损坏。正确的备份路径应遵循"导出-传输-验证"三步原则,对应项目中以下关键模块:
- 同步控制逻辑:kernel/api/sync.go
- 异步任务队列:kernel/task/queue.go
- 云空间管理:kernel/api/repo.go
方案一:使用内置Python脚本实现基础备份
项目scripts/目录下提供了parse-changelog.py工具,虽设计用于解析更新日志,但其模块化架构可改造为备份脚本。以下是最小化实现示例:
import os
import shutil
from datetime import datetime
# 思源笔记数据目录(需替换为实际路径)
SIYUAN_DATA = "~/.siyuan/data"
# 备份目标路径
BACKUP_DIR = "~/siyuan_backups"
def backup_notes():
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
backup_path = os.path.join(BACKUP_DIR, f"siyuan_backup_{timestamp}")
# 创建备份目录
os.makedirs(backup_path, exist_ok=True)
# 复制核心数据(排除临时文件)
shutil.copytree(
os.path.expanduser(SIYUAN_DATA),
os.path.join(backup_path, "data"),
ignore=shutil.ignore_patterns("temp", "*.log")
)
print(f"备份完成:{backup_path}")
if __name__ == "__main__":
backup_notes()
该脚本实现了基础的文件级备份,可通过修改ignore参数自定义排除规则。项目中类似的任务调度逻辑可参考task/queue.go的异步任务处理机制,特别是第50行的AppendAsyncTaskWithDelay函数,可用于实现延迟备份功能。
方案二:利用API接口构建智能备份系统
思源笔记提供完整的HTTP API用于备份控制,通过调用sync.go中定义的接口,可实现更精细的备份策略。以下是关键API的使用示例:
1. 启用自动同步
curl -X POST http://localhost:6806/api/sync/setSyncEnable \
-H "Content-Type: application/json" \
-d '{"enable": true}'
2. 配置同步间隔(分钟)
curl -X POST http://localhost:6806/api/sync/setSyncInterval \
-H "Content-Type: application/json" \
-d '{"interval": 30}'
3. 触发手动备份
curl -X POST http://localhost:6806/api/sync/performSync \
-H "Content-Type: application/json" \
-d '{"direction": "push"}'
这些API对应router.go中第263-283行的路由定义,支持同步开关、间隔设置、冲突处理等高级功能。结合任务调度工具(如Linux的cron或Windows任务计划程序),可实现无人值守的自动化备份。
方案三:企业级备份架构(多设备+版本控制)
对于需要跨设备协作的用户,建议采用"本地定时备份+云端版本控制"的混合架构。项目sync.go第466行提到支持"完全手动同步"模式,可通过以下流程实现:
- 本地定时任务:使用系统任务调度工具,每小时执行一次完整备份
- 版本管理:将备份目录纳入Git仓库,项目.gitignore已预设排除规则
- 云同步层:通过私有Git服务器(如Gitea)或对象存储(S3/OSS)同步版本库
该方案利用了项目内置的broadcast.go实时通知机制,当检测到备份异常时可立即触发告警。同步状态监控可通过访问/api/sync/getSyncInfo接口实现,返回结果包含同步状态、最后成功时间等关键指标。
备份验证与恢复演练
无论采用哪种方案,定期验证备份有效性至关重要。建议每月执行一次恢复测试,步骤如下:
- 创建临时工作空间:
mkdir -p /tmp/siyuan_test - 恢复备份数据:
cp -r ~/siyuan_backups/latest/data /tmp/siyuan_test/ - 使用测试模式启动:
./siyuan --workspace /tmp/siyuan_test
项目system.go第792行定义了同步失败的错误处理逻辑,可作为恢复脚本的错误检测参考。完整的备份验证流程应包含文件完整性校验、数据库一致性检查和随机笔记内容抽查三个环节。
工具链推荐与资源链接
| 工具类型 | 推荐方案 | 项目相关模块 |
|---|---|---|
| 定时任务 | Linux cron / Windows任务计划 | task/queue.go |
| 版本控制 | Git + Git LFS | .gitignore |
| 云存储 | MinIO / 阿里云OSS | repo.go |
| 监控告警 | Prometheus + AlertManager | system.go |
官方文档:README_zh_CN.md
API参考:API.md
同步协议:sync.go
通过本文介绍的方法,可构建符合"3-2-1备份原则"(3份数据、2种介质、1份异地)的思源笔记保护系统。建议根据数据重要性选择合适方案,每日笔记量超过100条的重度用户推荐方案三,并配置实时增量备份。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




