---
name: vakhunter_dead_polling_detector
description: "ВакХантер: мёртвый polling при живом процессе — как диагностировать за 10 секунд и что его ловит"
metadata: 
  node_type: memory
  type: project
  originSessionId: 805ead91-dfa3-49d2-a5e6-01a980e715fd
  modified: 2026-07-28T13:36:23.264Z
---

**Симптом:** «бот не реагирует на кнопки», но процесс жив и рассылки уходят. Повторялся трижды (2026-06-15, 07-26, 07-27 — последний раз молчал 36 часов).

**Диагноз одной командой** (не полагаться на лог — исправный polling НИЧЕГО не логирует, тишина не значит поломку):
`curl -s -x http://127.0.0.1:2081 "https://api.telegram.org/bot$TOKEN/getUpdates?timeout=8&limit=1"`
— `409 Conflict` = polling **жив**; `ok:true` с данными = polling **мёртв**. Дополнительно `getWebhookInfo` → `pending_update_count` (необработанная очередь).

**Почему процесс выглядит здоровым:** в ВакХантере scheduler крутится через `job_queue` (тот же asyncio-loop), поэтому при смерти ТОЛЬКО updater'а loop жив, тики идут, watchdog-детектор по scheduler-тику молчит by design.

**Что ловит теперь (`c9ce3ed`):** бот раз в 60с пишет `vakhunter-polling.heartbeat`, но только пока `updater.running`; `scripts/vh_watchdog.sh` киктует при возрасте метки >300с. Не зависит от трафика — прежний детектор по `pending_update_count` при ~13 юзерах срабатывал лишь через сутки. **Важно:** после кика метку надо удалять, иначе следующий тик киктует повторно → петля рестартов (поймано на тесте).

Проверять фикс: состарить метку (`echo $(($(date +%s)-900)) > файл`), запустить watchdog, ждать `DEAD polling` в `vakhunter-watchdog.log` и смену PID. См. [[vakhunter_overview]], Obsidian VakHunter Changelog 2026-07-28.
