12 KiB
date, type, tags
| date | type | tags | |||||
|---|---|---|---|---|---|---|---|
| 2026-05-08 | project |
|
Северный лес — AI-ассистент для server1c
Создан 2026-05-08, до отпуска Олега в Египте (2026-05-09 → 2026-05-22). Цель — пока Олега нет, кто-то на стороне Бужарово видит в Telegram-группе что происходит с сервером и может ткнуть
/approveна восстановительные действия.
Что это
Отдельный AI-бот на стеке openclaw 2026.5.7, заточен только под мониторинг и реагирование на инциденты сервера 1С в Бужарово. Watchdog-слой работает независимо от openclaw и шлёт алерты в Telegram напрямую через bot API — даже если AI-часть упала, уведомления всё равно дойдут.
Не путать с:
- LXC 137 projects/dttb/openclaw — основной AI-бот Олега, обслуживает всю инфраструктуру.
- LXC 114 projects/niikn/clawdbot-niikn — бот в НИИКН для Максима Мауля.
Расположение
| Параметр | Значение |
|---|---|
| Proxmox LXC | 139 (hostname severny-les) |
| IP LAN | 10.0.0.240 |
| NetBird IP | 100.70.212.78 (FQDN severny-les.netbird.cloud) |
| Ресурсы | 2 cores / 4 GB RAM / 10 GB disk (Ubuntu 24.04) |
| Доступ | sshpass -p '1qaz!QAZ' ssh root@10.0.0.250 "pct exec 139 -- bash" |
Telegram
- Bot username:
@bz_sl_bot - Display name: "ИИ Ассистент Бужарово ( Северный лес )"
- Bot ID:
8322860033 - Token: см.
/root/.openclaw/openclaw.json→channels.telegram.botToken(или/etc/severny-les/watchdog.env) - Allowlist: Олег
1292155421(DM). Группа — пока пустая, обновимgroupAllowFromкогда бот будет добавлен в TG-группу руководящего состава.
Стек и сервисы
openclaw 2026.5.7 (system-level systemd)
- Конфиг:
/root/.openclaw/openclaw.json - Workspace:
/root/clawd/(IDENTITY/INFRASTRUCTURE/USER/SOUL/MEMORY/TOOLS/HEARTBEAT.md +scripts/) - Unit:
/etc/systemd/system/openclaw-gateway.service(НЕ--userкак на 137 — в LXC без sessions это не работает) - Gateway port:
18790(на 137 — 18789, чтобы не путать) - Primary model:
omniroute/cc/claude-opus-4-7(Opus 4.7 через Max), fallbacks:kr/claude-sonnet-4.5→cc/claude-sonnet-4-6 - Plugin bonjour: disabled (превентивно от mDNS-крэшей в LXC)
- NODE_OPTIONS:
--dns-result-order=ipv4first(превентивно от Telegram IPv6-сбоев)
systemctl status openclaw-gateway.service
systemctl restart openclaw-gateway.service
journalctl -u openclaw-gateway.service -n 50 --no-pager
buzharovo-watchdog (system-level systemd timer, каждые 60s)
- Скрипт:
/usr/local/bin/buzharovo-watchdog.sh - Unit:
/etc/systemd/system/buzharovo-watchdog.{service,timer} - Env:
/etc/severny-les/watchdog.env(TG token + chat_id) - State:
/var/lib/severny-les/state.json— антиспам (алерт только при смене уровня)
Уровни: OK / WARNING (часть проверок упала) / WARNING_NETBIRD (NB до server1c лежит, публично OK) / CRITICAL (сервер недоступен и публично, и через NetBird).
Алерт уходит в TG напрямую через https://api.telegram.org/bot.../sendMessage, мимо openclaw. Если openclaw упал — алерт всё равно придёт.
journalctl -t buzharovo-watchdog --since "1 hour ago" -n 30
systemctl list-timers buzharovo-watchdog.timer
# Тестовый прогон:
set -a; . /etc/severny-les/watchdog.env; set +a; /usr/local/bin/buzharovo-watchdog.sh
netbird-watchdog (как на LXC 132/137)
- Скрипт:
/usr/local/bin/netbird-watchdog.sh(порт с LXC 137) - Unit:
/etc/systemd/system/netbird-watchdog.{service,timer}(каждые 2 мин) - При
Relays: 0/NилиPeers: 0/N(когда N>0) и Management=Connected —systemctl restart netbird(минимум 5 мин между рестартами).
Heartbeat (cron */5)
/etc/cron.d/severny-les-heartbeat→/root/clawd/scripts/heartbeat.shпишет timestamp в/tmp/severny-les-heartbeat- buzharovo-watchdog проверяет: если heartbeat старше 600s — добавляет в алерт строчку про "openclaw молчит" (анти-спам: не чаще 1 раз в час).
Что бот может делать (TOOLS.md)
Без /approve (read-only)
/status— общий статус (ping/порты публично + через NetBird, состояние 1С службы, CPU rmngr)/check_1c— три 1С службы через WinRM (Running/Stopped/Disabled)/check_rmngr— детектор rmngr-loop (CPU rmngr.exe за 5 секунд, >50% = диагноз)
С /approve от Олега 1292155421
/restart_1c→Restart-Service '1C:Enterprise 8.3 Server Agent (x86-64)' -Force. Все сеансы 1С вылетят. Это рецепт от 2026-05-07 rmngr-loop (decisions/2026-05-07-buzharovo-1c-rmngr-loop-after-crash)./kill_orphan_ragent— найтиragent.exeбез LISTENING на 1540 иStop-Process -Force(зомби после restart_1c).
Ребут сервера НЕ даём — по опыту 2026-05-07 ребут rmngr-loop не помогает, простой добавляет.
exec-approvals.json лежит в /root/.openclaw/exec-approvals.json — это whitelist для openclaw. Команды не из whitelist openclaw отказывается выполнять.
WinRM на server1c
- Адрес:
100.70.75.103:5985(через NetBird, basic, http) — публично 5985 закрыт - Учётка:
dttb/1qaz!QAZ - Python:
pywinrmуже стоит. Обёртка —/root/clawd/scripts/winrm_lib.py.
⚠️ На 2026-05-08 NetBird ACL до server1c пока НЕ работает — handshake не идёт (Required key not available). Олегу нужно в NetBird Dashboard разрешить severny-les доступ к server1c хотя бы на порты 5985 (WinRM) + 1 ICMP + 3389 (опц.). До этого WinRM-actions не работают, watchdog мониторит только публичные проверки.
Скрипты в /root/clawd/scripts/
| Скрипт | Что делает |
|---|---|
check_buzharovo.sh |
bash, общий статус (ping+порты), без WinRM |
winrm_lib.py |
обёртка pywinrm, переиспользуют все py-скрипты |
check_1c_service.py |
3 службы 1С через WinRM |
check_rmngr_cpu.py |
детектор rmngr-loop |
restart_1c_agent.py |
Restart-Service '1C:...' (требует /approve) |
kill_orphan_ragent.py |
убить зомби ragent (требует /approve) |
heartbeat.sh |
cron, пишет timestamp |
sql_native_backup.py |
бэкап ИБ через MS SQL Server BACKUP DATABASE с компрессией (см. decisions/2026-05-08-buzharovo-sql-native-backup). Online, ~2 сек на 3.8 GB, не требует cluster admin 1С |
Сценарии работы
Олег в отпуске, ночью упал rmngr
- Watchdog на 60-й секунде заметил: WinRM
1C:Enterprise 8.3 Server Agent (x86-64)всё ещё Running, ноcheck_rmngr_cpu.pyвернулRMNGR_LOOP. - Watchdog шлёт в TG-группу: 🚨 Северный лес — rmngr-loop на server1c. CPU rmngr 67%. Предлагаю
/restart_1c. - Дежурный из руководящего состава отвечает в группу, бот ему: "Ок, но нужно
/approveот Олега. Можете позвонить ему? Или подождать утра — время до критичного простоя ~2 часа." - Олег с пляжа делает
/approve restart_1c→ бот выполняет → отписывается в группу что прошло.
Сервер недоступен публично
- Watchdog: 3 подряд провала ping
185.13.47.2за 3 минуты + RDP не отвечает. - Шлёт в группу: 🚨 server1c НЕДОСТУПЕН. Не отвечает ни публично, ни через NetBird. Похоже сервер лёг или сеть провайдера.
- Бот ничего не может сделать сам — это VDS у внешнего провайдера. Эскалирует на Олега, ждёт ручного вмешательства.
NetBird до server1c упал, публично всё OK
- Watchdog: ping
185.13.47.2ОК, ping100.70.75.103нет. - Шлёт: ⚠️ NetBird до server1c лежит. Публично сервер виден. WinRM-actions недоступны.
- Сервер сам по себе работает — пользователи в Бужарово 1С видят. Но бот не может делать диагностику/рестарты пока NetBird не починен.
Чек-лист после возвращения Олега из Египта
- Прописать в NetBird Dashboard ACL
severny-les→server1c(5985 TCP минимум). - Добавить @bz_sl_bot в TG-группу руководящего состава Северного леса; узнать
chat_idгруппы. - Обновить
/etc/severny-les/watchdog.envBZ_TG_CHAT на групповой chat_id. - Обновить
/root/.openclaw/openclaw.jsonchannels.telegram.groupAllowFrom— добавить chat_id группы. - Сделать smoke-test
/restart_1c(на тестовых выходных, не в боевые часы) — убедиться что openclaw реально дёргает скрипт после/approve. - После миграции server1c на свой сервер — обновить IP в
/root/clawd/INFRASTRUCTURE.mdи в watchdog-скрипте.
Известные ограничения и риски
- NetBird ACL на момент создания не пускает severny-les к server1c. Watchdog мониторит публично + через NetBird пингом; WinRM-команды (диагностика 1С, рестарт службы) не работают пока ACL не настроен.
- Группа TG ещё не настроена — алерты идут в личку Олегу. Когда @bz_sl_bot добавят в группу — поправить env+config.
- Bonjour отключен превентивно (был crash-loop на 137, см. projects/dttb/openclaw#Проблема-Crash-loop-каждые-40-сек).
- DNS LXC 139 идёт на
1.1.1.1/8.8.8.8напрямую (черезpct set --nameserver), не на10.0.0.1— иначе FakeIP от Mihomo ломает Telegram API. - openclaw на system-level (не --user как на 137). В LXC без user-session systemd --user недоступен.
Бэкап
# на самом LXC 139
tar czf /root/severny-les-state-$(date +%F).tar.gz /root/.openclaw /root/clawd /etc/systemd/system/buzharovo-watchdog.* /etc/systemd/system/netbird-watchdog.* /etc/systemd/system/openclaw-gateway.service /etc/severny-les /etc/cron.d/severny-les-heartbeat /usr/local/bin/buzharovo-watchdog.sh /usr/local/bin/netbird-watchdog.sh
# скопировать наружу
sshpass -p '1qaz!QAZ' ssh root@10.0.0.250 "pct pull 139 /root/severny-les-state-*.tar.gz /var/lib/vz/dump/"
Откат
Если бот сломал что-то и его нужно убрать целиком:
# stop and disable
pct exec 139 -- systemctl disable --now openclaw-gateway.service buzharovo-watchdog.timer netbird-watchdog.timer
# либо целиком LXC
pct stop 139 && pct destroy 139
NetBird-пир severny-les.netbird.cloud останется в Dashboard — нужно удалить руками.