AUTOMATION NOTE
把“处理昨天日记”自动化到凌晨 2 点
2026-01-13 · Zon (个人 LifeOS) · myObsidian · DailyRecord
launchd 定时 + 脚本(git 证据 → 写回流水线 → 自动 commit/push)
TL;DR
- 用 launchd 在每天 02:00 运行一个仓库内脚本,自动补全昨日日记的“HTML(提交)”证据行。
- 脚本只新增缩进第二行(不改每条第一行),并在 YAML 缺失/为空时做保守补全。
- 成功写回后自动 git commit + push;失败(无网/冲突)不会破坏日记,只会停止并留日志。
Key Insights
- 全自动的关键不是“更聪明”,而是“可重复 + 幂等”:每天跑多次也不重复写入。
- 先把证据固定为 Git(.html commit)这条硬口径,避免把 mtime/未提交改动误写进日记。
- 把失败模式当正常:push 失败时保留本地 commit,下次任务再补推送。
Step-by-step Playbook
Beginner Mode
- 把脚本放进仓库
脚本已在 /Users/zon/Desktop/MINE/6 Obsidian/myObsidian/scripts/autofill_yesterday_diary.py,默认处理“昨天”,并会自动 commit/push。 - 把 launchd 配置放进 LaunchAgents
复制 /Users/zon/Desktop/MINE/6 Obsidian/myObsidian/automation/com.eomzon.myobsidian.autofill-yesterday.plist 到 ~/Library/LaunchAgents/,并 load 启用。 - 验证能跑通一次
手动执行:/usr/bin/python3 /Users/zon/Desktop/MINE/6 Obsidian/myObsidian/scripts/autofill_yesterday_diary.py --dry-run(确认无报错后去掉 --dry-run)。 - 确认 SSH/权限
确保 02:00 时段也能访问 git remote(SSH key/agent 可用);否则 push 会失败但不会损坏文件。 - 看日志与回滚
查看 ~/Library/Logs/myObsidian-autofill-yesterday.*.log;要停用就 unload + 删除 plist。
Checklist
-
02:00 机器是开机/唤醒状态(否则不会执行)。
-
repo 路径没有变化(plist 里写死了绝对路径)。
-
git push 需要的网络与 SSH key 可用。
-
脚本幂等:重复执行不会重复插入同一条 HTML 证据。
-
只改昨日日记文件,不写入其它产物/日志到仓库。
Occam First (keep only what you need)
- 第一阶段只做 HTML(提交)证据(你 SOP 的强制项)。
- 不要引入“未提交改动/mtime”自动写回,除非你明确要。
- 一旦冲突多发,再考虑把“写回 + 提交”改成“只生成摘要”。
SVG Diagrams
Expert Views
Apple launchd / launchd.plist(5) — macOS 计划任务(LaunchAgents)最佳实践
- Thesis: 用 StartCalendarInterval 定时是最稳的,前提是任务本身必须幂等、可重入、可失败。
- Arguments: 避免依赖交互式环境(PATH/ssh-agent);把绝对路径写进 ProgramArguments;用 StandardOut/Err 落日志便于排障。
- Limits: 机器睡眠/关机时不会执行;网络或 key 不可用会导致 push 失败,需要把失败当正常路径处理。
“paraphrase: Schedule is easy; correctness comes from idempotency + explicit environment.” — launchd.plist(5)
Options
| Option | Best for | Upside | Downside | Key risk | First step |
|---|---|---|---|---|---|
| A | 你要“尽可能全自动”,并接受偶尔 push 失败的情况下仍自动 commit。 | 每天自动写回 + 自动 push;你基本不用再手动触发。 | 需要维护绝对路径;偶发冲突/无网时需要人工处理一次。 | 02:00 时 SSH key 不可用导致 push 失败;或日记文件被同时编辑导致冲突。 | 安装 LaunchAgent 并手动跑通一次(含 push)。 |
| B | 你想保留“人工确认写回/提交”的安全阀。 | 冲突/误写风险更低。 | 还是需要你点一下或跑一次命令。 | 仍可能忘记执行,回到“手动触发很愚蠢”的问题。 | 先只生成证据摘要文件,白天再由你确认写回。 |
Evidence & Confidence
| Claim | Evidence | Confidence | Source |
|---|---|---|---|
| launchd + 幂等脚本可以把“处理昨天日记”自动化到每天固定时间执行。 | 本仓库已新增脚本与 plist,且脚本 dry-run 可跑通。 | High | autofill_yesterday_diary.py |
Next Steps
- 把 plist 安装到 ~/Library/LaunchAgents 并启用。
- 手动运行一次脚本(不带 --dry-run)验证 commit/push 与幂等行为。
- 跑 2-3 天后再决定是否把“非 HTML 证据”也纳入自动写回。
Details (Optional)
Second page
Keep this page minimal. Put complex derivations, long tables, and deep dives into a secondary HTML page, then link it here.
Sources
Closing Summary
把“证据收集 + 写回 + 提交推送”变成一个每天 02:00 自动运行的幂等任务,就不需要你再手动触发。
- 先只自动写回 HTML(提交)证据,口径最硬、误写风险最低。
- push 失败是正常分支:保留 commit,下一次或你醒来后再推送。
- 如果冲突频繁,再回退到“只生成摘要文件”的半自动方案。
One next action
现在就安装 LaunchAgent,然后手动跑一次脚本(不带 --dry-run)验证 commit/push。