本项目记录并修复“朋友圈一键同步”链路故障。同步脚本运行在 .155 Windows 主机,负责解密微信数据库、导出朋友圈、导入 Memos 并同步到网站;NAS 通过 H: 映射盘提供微信数据快照,.223 博客后台提供导入与状态接口。
故障直接原因是 .155 重启后 H: 丢失,刷新脚本第一步找不到微信数据库路径而失败,且输出被 Out-Null 吞掉,只留下退出码 1。排查中还发现非交互计划任务或多层管道下,通过 ssh 调用 NAS 导入脚本会偶发挂起,导致整条同步卡死。进一步追查发现,解密脚本一直读取 NAS 上的旧微信数据快照,而微信实际数据已写到本地目录,导致新朋友圈不同步。
修复包括自动挂载 H:、失败时打印诊断、改走博客 API 导入与状态核对、自动选择最新 sns.db,并统一 UTF-8 输出。现状为手动一键同步、单独刷新和计划任务 MomentsSync 均验证成功,Memos 条数与网站同步正常,相关日志可读。
功能
- 自动检测并挂载 NAS 的 H: 映射盘,挂载失败明确报错
- 解密失败时输出最后 30 行日志,避免静默失败
- 导入 Memos 与状态核对改走博客 API,不再从 .155 通过 ssh 调用 NAS
- 自动在候选目录中选择最新 sns.db,优先本地微信目录,H: 快照兜底
- 计划任务改用 Start-Process -Wait 与文件重定向,避免嵌套输出捕获卡死
- 桌面一键同步、手动刷新和计划任务三种入口均验证通过
技术栈
使用 / 部署教程
1. 使用推荐入口
优先运行桌面或计划任务中的“朋友圈一键同步”。该入口会调用一键同步脚本,完成刷新、导入与状态核对。
2. 手动一键同步
如需手动执行,在 .155 上运行:
powershell -NoProfile -ExecutionPolicy Bypass -File C:\Users\Administrator\moments-export\sync_all.ps1
3. 单独刷新朋友圈
只刷新朋友圈时可运行以下命令,脚本会自动挂载 H::
powershell -NoProfile -ExecutionPolicy Bypass -File C:\Users\Administrator\moments-export\refresh_moments.ps1 -NewOnly
4. 验证计划任务
检查计划任务 MomentsSync 是否返回 EXIT=0,并确认 5 个步骤全部完成。手动直接刷新时,5 步应全部显示 ✔。
5. 查看日志与状态
日志位于: C:\Users\Administrator\moments-export\logs\sync-*.log 与 sync-all-*.log,正常中文可读。状态可通过博客 API 核对 Memos 条数、资源数和最新动态时间。
6. 回滚方法
.155 回滚时,用同目录 *.bak-20261029-apifix 覆盖回 refresh_moments.ps1 和 nightly_sync.ps1。.223 回滚时,恢复 /root/app.py.bak-memosapi-* 后执行 systemctl restart blog-admin,并删除 /etc/sudoers.d/blog-moments 与两个 helper。注意旧版仍存在本次修复的两个问题。
常见问题
故障现象是什么?
手动或计划任务同步失败,控制台只显示退出码 1;排查发现 H: 映射盘丢失,且 ssh 调用 NAS 导入脚本偶发挂起。
新朋友圈为什么不同步?
解密脚本读取的是 NAS 旧微信数据快照,而微信实际数据已写到本地目录;修复后自动选择最新 sns.db。
如何手动同步?
运行桌面“朋友圈一键同步”或 sync_all.ps1;也可单独运行 refresh_moments.ps1 -NewOnly。
如何确认修复成功?
计划任务 MomentsSync 返回 EXIT=0,五步完成;日志中文可读,博客 API 状态与网站朋友圈页同步正常。
注意
- 回滚 .155 旧版时注意:旧版仍存在 H: 丢失静默失败和 SSH 偶发挂起两个问题。
- .223 回滚需恢复 /root/app.py.bak-memosapi-*,重启 blog-admin,并删除 /etc/sudoers.d/blog-moments 与两个 helper。
- 日志正常中文可读;桌面 bat 已改 UTF-8 + chcp 65001,原文件备份为 .bak-20261029-utf8。

评论
加载中…