7.3 KiB
title, aliases, tags, created, updated
| title | aliases | tags | created | updated | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Vault sync — архитектура и ручной прогон |
|
|
2026-09-15 | 2026-09-15 |
Vault sync — архитектура и ручной прогон
Зачем документ: правки в vault (Obsidian) на Mac не появляются на телефоне сами по себе. Есть отдельная петля синхронизации с тремя фазами, которая гоняется cron-задачей. Без прогона этой петли телефон правку не увидит. Инциденты синка (таймауты LLM, «тик completed но скрипт не запущен») — family/documents/vault-sync/2026-09-14-cron-api-timeout-sync-outage.
1. Три звена (не путать!)
| Звено | Что это | Кто驱动 |
|---|---|---|
| 1. Рабочий клон Mac | /Users/admin/obsidian — где правит агент |
агент (git add/commit/push) |
| 2. Bare-репозиторий | /mnt/RED_2TB/storage/git/obsidian-vault.git на NAS (mallexxx.duckdns.org) |
приём push от Mac |
| 3. SyncThing-папка | /mnt/RED_2TB/storage/obsidian-syncthing на NAS |
раздаёт на телефон через SyncThing |
⚠️ ГЛАВНАЯ ОШИБКА: думать, что
git pushс Mac = правка на телефоне.git pushдоезжает только до bare (звено 2). Телефон читает звено 3 —obsidian-syncthing. Между ними — петляsync-vault.sh, которая делает pull в звено 3.
Проверка расхождения (диагностика «телефон не видит»)
# Mac
cd /Users/admin/obsidian && git log --oneline -1
# NAS: все клоны должны быть на ТОМ ЖЕ коммите, что Mac
ssh truenas_admin@mallexxx.duckdns.org '
cd /mnt/RED_2TB/storage/git/obsidian-vault.git && echo -n "bare: " && git log --oneline -1 main
cd /mnt/RED_2TB/storage/obsidian-syncthing && echo -n "syncthing: " && git log --oneline -1
cd /mnt/RED_2TB/storage/obsidian && echo -n "obsidian: " && git log --oneline -1'
Если syncthing: отстаёт — телефон правку не увидит, пока не прогонится sync-петля.
2. sync-vault.sh — три фазы
Скрипт: /opt/data/sync-vault.sh — живёт в окружении Hermes (контейнер), НЕ на NAS.
На NAS его нет (ls /opt/data/sync-vault.sh → нет файла), поэтому пулль «руками оттуда» не выйдет.
Лог: /tmp/vault-sync.log (тоже в контейнере).
Скрипт печатает по три timestamped строки Pushed ✓ — по одной на фазу:
| Фаза | Что делает |
|---|---|
[syncthing] |
стягивает изменения с Eagle/Кракена, коммитит и пушит |
[taiga-vault] |
пушит изменения из vault/ |
[syncthing-out] |
пушит в SyncThing-папку → то, что увидит телефон |
Признак успеха: три строки
Pushed ✓. Если в логе за тик ноль строк — скрипт вообще не запускался (см. инцидент 2026-09-14, «второй режим отказа»).
3. Как прогнать синк вручную
Cron-задача Hermes: sync-vault, id 29851c413903, расписание */5 * * * *, prompt = bash /opt/data/sync-vault.sh >> /tmp/vault-sync.log 2>&1.
# 1) Найти задачу
cronjob action='list'
# 2) Прогнать принудительно
cronjob action='run' job_id='29851c413903'
⚠️ Питфолл: задача оформлена как prompt, а не как --script, поэтому её исполняет LLM-раунд. Последствия:
- провайдер не отвечает → тик висит до 600 с, очередь блокируется на 30–57 мин;
- агент может ответить текстом без вызова инструмента → статус
completed, но скрипт не запущен (~6,6 % тиков). Правильный фикс (не сделан, требует решения Alex):--no-agent --script <script>.
Проверка результата после прогона:
# в контейнере Hermes
tail -6 /tmp/vault-sync.log # ожидаем три «Pushed ✓»
# на NAS — все три клона на одном коммите
ssh truenas_admin@mallexxx.duckdns.org '
cd /mnt/RED_2TB/storage/obsidian-syncthing && git log --oneline -1'
4. Питфолл: git fetch origin на NAS не работает
В клонах на NAS remote настроен как origin → /vault.git — это путь внутри контейнера Hermes, а не на NAS.
$ cd /mnt/RED_2TB/storage/obsidian-syncthing && git remote -v
origin /vault.git (fetch)
origin /vault.git (push)
git fetch origin # → Please make sure you have the correct access rights and the repository exists
git merge --ff-only origin/main # → Already up to date (ложь — реально отстаёт)
Вывод: «Always up to date» на NAS не значит, что приехало — remote ведёт в недоступный путь. Пулль в NAS-клоны из NAS невозможен. Обновление звена 3 делает только
sync-vault.shиз контейнера Hermes. Не тратить время наgit fetchпо SSH на NAS — идти сразу вcronjob action='run'.
5. Контрольный список «правка должна дойти до телефона»
cd /Users/admin/obsidian && git add -A && git commit -m "..."— коммит на Mac.git push nas HEAD— проверить, что push прошёл (4f156ee..71efdd0 HEAD -> main).git status --short→ пусто = рабочее дерево чисто.- Прогнать sync-петлю:
cronjob action='run' job_id='29851c413903'. - Проверить:
tail /tmp/vault-sync.log→ триPushed ✓; NAS-клонobsidian-syncthingна том же коммите. - Только после шага 3–4 правка появится на телефоне.
⚠️
git pushбез шага 3 = правка есть на Mac и в bare, но телефон её не видит. Это и есть исходная жалоба «какого хуя я её на телефоне по syncthing не вижу».
Связанные заметки
- family/documents/vault-sync/2026-09-14-cron-api-timeout-sync-outage — инциденты синка, аудит executions.db
- personal/tasks/vault-sync-cron — журнал прогонов
- family/how-to/vault-sync-summary — ранняя сводка