[2026-09-15] vault-sync: операционный документ README.md (как работает, как запустить синк руками)
This commit is contained in:
@@ -122,3 +122,4 @@ curl -s -X POST -H @/tmp/h1 -H "Content-Type: application/json" \
|
||||
|
||||
- [[family/how-to/home-automation]] — единый справочник: топология, железо, Zigbee, Modbus, команды, сценарии, питфоллы
|
||||
- [[family/documents/home-automation-wishlist]] — роадмап идей и приоритетов
|
||||
- [[family/how-to/vault-sync-pipeline]] — правки в vault не доедут до телефона без прогона sync-петли
|
||||
|
||||
@@ -9,6 +9,7 @@ updated: 2026-09-15
|
||||
|
||||
> **Единственный справочник по домашней автоматизации.** Всё: топология, железо, Zigbee, Modbus, доступ, команды, сценарии, питфоллы.
|
||||
> **Автоматизации** (16 шт., логика, дефекты) — [[family/how-to/ha-automations]].
|
||||
> 📄 Правка этой доки не появится на телефоне после `git push` — нужен прогон sync-петли: [[family/how-to/vault-sync-pipeline]].
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -0,0 +1,128 @@
|
||||
---
|
||||
title: "Vault sync — архитектура и ручной прогон"
|
||||
aliases: [vault-sync, синк vault, sync-vault.sh, телефон не видит vault]
|
||||
tags: [family, how-to, vault, sync, syncthing, cron]
|
||||
created: 2026-09-15
|
||||
updated: 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.
|
||||
|
||||
### Проверка расхождения (диагностика «телефон не видит»)
|
||||
|
||||
```bash
|
||||
# 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`.
|
||||
|
||||
```bash
|
||||
# 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>`.
|
||||
|
||||
**Проверка результата после прогона:**
|
||||
```bash
|
||||
# в контейнере 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)
|
||||
```
|
||||
|
||||
```bash
|
||||
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. Контрольный список «правка должна дойти до телефона»
|
||||
|
||||
1. `cd /Users/admin/obsidian && git add -A && git commit -m "..."` — коммит на Mac.
|
||||
2. `git push nas HEAD` — **проверить**, что push прошёл (`4f156ee..71efdd0 HEAD -> main`).
|
||||
`git status --short` → пусто = рабочее дерево чисто.
|
||||
3. **Прогнать sync-петлю:** `cronjob action='run' job_id='29851c413903'`.
|
||||
4. Проверить: `tail /tmp/vault-sync.log` → три `Pushed ✓`; NAS-клон `obsidian-syncthing` на том же коммите.
|
||||
5. Только после шага 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]] — ранняя сводка
|
||||
Reference in New Issue
Block a user