auto-sync from MEMORY.md (2026-05-26 18:44)
This commit is contained in:
@@ -16,6 +16,12 @@ aliases: [Бужарово, buzharovo, Server1C]
|
||||
- Netbird: 100.70.75.103 (server1c.netbird.cloud)
|
||||
- Подробности и runbook: [[projects/buzharovo/server1c]]
|
||||
|
||||
- **Северный лес — AI-ассистент** — LXC 139 на dttb-Proxmox, openclaw + watchdog для server1c.
|
||||
- LAN: 10.0.0.240, NetBird: 100.70.212.78
|
||||
- Telegram: `@bz_sl_bot` ("ИИ Ассистент Бужарово ( Северный лес )")
|
||||
- Справочник и runbook: [[projects/buzharovo/severny-les-bot]]
|
||||
- Решение о создании: [[decisions/2026-05-08-severny-les-bot-buzharovo]]
|
||||
|
||||
## Известные рецепты
|
||||
|
||||
- **rmngr-loop после crash** (07.05.2026): тормоза локальных пользователей → `Restart-Service '1C:Enterprise 8.3 Server Agent (x86-64)' -Force`. Полный ребут сервера НЕ помогает. Полный разбор: [[decisions/2026-05-07-buzharovo-1c-rmngr-loop-after-crash]].
|
||||
|
||||
@@ -47,3 +47,45 @@ tags: [dttb]
|
||||
**Why:** причина рута rmngr-loop неясна — возможно повреждение кэша `srvinfo`, регресс 8.3.27.1606, или Disabled-служба `RagentServer_8327` мешает первому запуску ragent. Если повторится — смотреть `C:\Program Files\1cv8\srvinfo\reg_*\1Cv8FTLog\` на ошибки.
|
||||
|
||||
**Долгосрочно:** настроить несколько `rphost` в кластере (по одному на 8-12 сеансов) — сейчас один rphost на всех локальных юзеров = бутылочное горлышко.
|
||||
|
||||
## MS SQL Server (для server1c\RitmUl)
|
||||
|
||||
- **Instance:** `localhost` (default, MSSQL11 = SQL Server 2012 SP4)
|
||||
- **SA / Qwer1122334400** (полные права на все БД)
|
||||
- **БД:** `RitmUl` (~3.8 GB), также есть `Accounting`, `Retail_2021`, `Retail_2021demo`
|
||||
- **Connection string:** `Server=localhost;Database=master;User Id=sa;Password=Qwer1122334400;`
|
||||
|
||||
## Бэкапы — native SQL, не Effector Saver
|
||||
|
||||
**Канон от 2026-05-08:** `BACKUP DATABASE` через SQL Server, не DT-выгрузка через Effector Saver. Подробности и причины — в [[decisions/2026-05-08-buzharovo-sql-native-backup]].
|
||||
|
||||
Команда:
|
||||
```sql
|
||||
BACKUP DATABASE [RitmUl]
|
||||
TO DISK = N'C:\backup\RitmUl_<timestamp>.bak'
|
||||
WITH FORMAT, INIT, COMPRESSION, COPY_ONLY, STATS = 5
|
||||
```
|
||||
|
||||
- **Папка:** `C:\backup\` (на C: было 374 GB свободно на 2026-05-08)
|
||||
- **Время:** ~2 сек на 3.8 GB БД
|
||||
- **Размер:** ~30% от оригинала (3.8 GB → 1.1 GB сжатый)
|
||||
- **Online:** не требует отключения пользователей, не требует cluster admin'а 1С
|
||||
- **Скрипт:** `/root/clawd/scripts/sql_native_backup.py` на LXC 139 (severny-les bot)
|
||||
|
||||
## Кластер 1С — известные проблемы
|
||||
|
||||
### Cluster admin отсутствует, и его нельзя добавить
|
||||
Серверная консоль 1С → `Локальный кластер → Администраторы` показывает 0, но при попытке создать через GUI требует логин cluster admin'а (которого нет) — chicken-and-egg. Через `rac` и `V83.COMConnector` — то же самое. Agent admin (создан 2026-05-08, `admin/1qaz!QAZ` на уровне `(*)Server1C → Администраторы`) **не поднимает права на cluster operations**.
|
||||
|
||||
**Последствия:**
|
||||
- Effector Saver задача `Бэкап 1Cv8` падает с `Администратор кластера не аутентифицирован (HRESULT=80004005)` → не может вызвать `TerminateSession` → не может получить эксклюзив на ИБ.
|
||||
- Все cluster operations (просмотр сессий, kill сессий, блокировка соединений) недоступны через API.
|
||||
|
||||
**Что НЕ помогло:** SQL `KILL` сессий через sa — 1С rphost восстанавливает соединения за 1-2 мин, и persistent session_id (например `КулябинПИ 4514` от 12:55:42 в день 2026-05-08) reanimate.
|
||||
|
||||
**Workaround:** SQL native backup (см. выше) — обходит всю эту историю с эксклюзивом.
|
||||
|
||||
**Как лечить (не сделано, рискованно):** обнулить `C:\Program Files\1cv8\srvinfo\reg_1541\1CV8Clst.lst` → потеряются и админы и регистрация ИБ → перерегистрировать ИБ через SQL params (`SA/Qwer1122334400`, host `localhost`, db `RitmUl`).
|
||||
|
||||
### V83.COMConnector x64 зарегистрирован
|
||||
2026-05-08 я через `regsvr32` зарегистрировал `C:\Program Files\1cv8\8.3.27.1606\bin\comcntr.dll` в `HKLM\SOFTWARE\Classes\V83.COMConnector` (только x64; x86 платформа на сервере не установлена). В Effector Saver вручную переключено на "64-разрядный V83.ComConnector" → `HRESULT=800401F3` ушёл.
|
||||
|
||||
173
projects/buzharovo/severny-les-bot.md
Normal file
173
projects/buzharovo/severny-les-bot.md
Normal file
@@ -0,0 +1,173 @@
|
||||
---
|
||||
date: 2026-05-08
|
||||
type: project
|
||||
tags: [buzharovo, bot, openclaw, watchdog, monitoring]
|
||||
---
|
||||
|
||||
# Северный лес — 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-сбоев)
|
||||
|
||||
```bash
|
||||
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 упал — алерт всё равно придёт.
|
||||
|
||||
```bash
|
||||
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
|
||||
1. Watchdog на 60-й секунде заметил: WinRM `1C:Enterprise 8.3 Server Agent (x86-64)` всё ещё Running, **но** `check_rmngr_cpu.py` вернул `RMNGR_LOOP`.
|
||||
2. Watchdog шлёт в TG-группу: 🚨 Северный лес — rmngr-loop на server1c. CPU rmngr 67%. Предлагаю `/restart_1c`.
|
||||
3. Дежурный из руководящего состава отвечает в группу, бот ему: "Ок, но нужно `/approve` от Олега. Можете позвонить ему? Или подождать утра — время до критичного простоя ~2 часа."
|
||||
4. Олег с пляжа делает `/approve restart_1c` → бот выполняет → отписывается в группу что прошло.
|
||||
|
||||
### Сервер недоступен публично
|
||||
1. Watchdog: 3 подряд провала ping `185.13.47.2` за 3 минуты + RDP не отвечает.
|
||||
2. Шлёт в группу: 🚨 server1c НЕДОСТУПЕН. Не отвечает ни публично, ни через NetBird. Похоже сервер лёг или сеть провайдера.
|
||||
3. Бот ничего не может сделать сам — это VDS у внешнего провайдера. Эскалирует на Олега, ждёт ручного вмешательства.
|
||||
|
||||
### NetBird до server1c упал, публично всё OK
|
||||
1. Watchdog: ping `185.13.47.2` ОК, ping `100.70.75.103` нет.
|
||||
2. Шлёт: ⚠️ NetBird до server1c лежит. Публично сервер виден. WinRM-actions недоступны.
|
||||
3. Сервер сам по себе работает — пользователи в Бужарово 1С видят. Но бот не может делать диагностику/рестарты пока NetBird не починен.
|
||||
|
||||
## Чек-лист после возвращения Олега из Египта
|
||||
|
||||
- [ ] Прописать в NetBird Dashboard ACL `severny-les` → `server1c` (5985 TCP минимум).
|
||||
- [ ] Добавить @bz_sl_bot в TG-группу руководящего состава Северного леса; узнать `chat_id` группы.
|
||||
- [ ] Обновить `/etc/severny-les/watchdog.env` BZ_TG_CHAT на групповой chat_id.
|
||||
- [ ] Обновить `/root/.openclaw/openclaw.json` `channels.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 недоступен.
|
||||
|
||||
## Бэкап
|
||||
|
||||
```bash
|
||||
# на самом 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/"
|
||||
```
|
||||
|
||||
## Откат
|
||||
|
||||
Если бот сломал что-то и его нужно убрать целиком:
|
||||
|
||||
```bash
|
||||
# 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 — нужно удалить руками.
|
||||
Reference in New Issue
Block a user