Files
obsidian-vault/family/documents/vault-sync/2026-09-16-silent-tick-clusters.md
T

61 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
tags: [vault, git, sync, cron, incident]
date: 2026-09-16
---
# 2026-09-16 — молчащие тики идут кластерами 4–5 подряд
## Итог ручного прогона (01:00 UTC)
```bash
cd /opt/data && bash /opt/data/sync-vault.sh >> /tmp/vault-sync.log 2>&1
```
Exit 0, «Pushed ✓» по всем трём фазам. Фаза 1 подтянула правки Eagle (коммит `8fe2e51`:
`family/how-to/ha-automations.md`, `family/how-to/home-automation.md`,
`family/tech/ha-registry-operations.md`, `family/tech/zigbee-t610-z2m-i-zha.md`).
Проверка: `/vault`, `/obsidian-syncthing` и bare — все на `8fe2e51`, `git status --porcelain` пуст
(жёсткие симлинки на /.obsidian в sparse checkout — норма).
## Находка: молчащие тики группируются
Метод: сверка `/tmp/vault-sync.log` с `/opt/data/cron/executions.db` по job_id `29851c413903`,
окно = с начала текущего лога (2026-09-15 11:35:19 — лог был обрезан при рекреации контейнера)
до 2026-09-16 01:00.
- запусков: 161, из них **11 (6,8 %) `completed` без единой строки в логе** (~19 с и меньше)
- это тот же режим отказа, что описан 2026-09-14: LLM-раунд отвечает текстом, bash не вызывается
- **новое:** пропуски идут не по одному, а кластерами:
- 2026-09-15 16:55 → 17:15 — 5 подряд (25 мин без синка)
- 2026-09-15 23:45 → 00:00 — 4 подряд (20 мин без синка)
- одиночные: 13:55, 22:50
Разрывы >10 мин в логе поэтому надо читать как «тик выполнился, но скрипт не вызван», а не как
«диспетчер не запустил задачу». Данные не теряются: git-синк идемпотентен, следующий удачный тик
догоняет всё.
Скрипт сверки (лог × executions.db, считает кластеры):
```bash
python3 - <<'EOF'
import sqlite3,re
from datetime import datetime
c=sqlite3.connect('file:/opt/data/cron/executions.db?mode=ro',uri=True)
rows=c.execute("select claimed_at,finished_at,status from executions where job_id='29851c413903' order by claimed_at").fetchall()
log=open('/tmp/vault-sync.log',encoding='utf-8',errors='replace').read()
log_start=datetime.strptime(re.search(r'\[(\d{4}-\d\d-\d\d \d\d:\d\d:\d\d)\]',log).group(1),'%Y-%m-%d %H:%M:%S')
ticks=set(re.findall(r'\[(\d{4}-\d\d-\d\d \d\d:\d\d):\d\d\] \[syncthing\] Pushed',log))
sel=[r for r in rows if datetime.fromisoformat(r[0]).replace(tzinfo=None)>=log_start]
miss=[r[0][:16].replace('T',' ') for r in sel if r[2]=='completed' and r[0][:16].replace('T',' ') not in ticks]
print('runs',len(sel),'silent',len(miss))
for m in miss: print(' ',m)
EOF
```
## Что не сделано
Корневая причина — prompt-задача: каждый тик требует LLM-раунда, а раунд иногда заканчивается без
вызова инструмента. Устранение (убрать LLM из петли) — `hermes cron edit 29851c413903 --no-agent
--script <path>`, требует решения владельца (см. заметку 2026-09-14).