После обновления OpenClaw какой именно слом заметили? не стартует gateway, падают зонды RPC или CLI уже «новое», а пользовательский systemd всё ещё указывает на старый путь? Статья для платформы: семь скрытых допущений, чтобы вскрыть split brain (старый и новый бинарники), таблицу симптомов («отпечаток» конфигурации vs токен/удалённый URL), безопасный шестишаговый ранбук (PATH → gateway install --force → gateway restart → doctor) и когда включать «разрушительные» переменные окружения. Ссылки: cron и регрессия после апгрейда, удалённый режим, наблюдаемость.
Официальный troubleshooting: новая версия OpenClaw пишет openclaw.json и маркеры вроде meta.lastTouchedVersion, но если в PATH попадается старый openclaw, чтение ещё может работать — тогда любые установка/перезапуск gateway CLI блокирует, чтобы не смешать метаданные — на практике это называют split brain.
«npm прошёл» равно «сервис на новом бинарнике»: npm install -g обновляет лишь глобальный префикс; в launchd/systemd --user может торчать старый абсолютный путь — после ребута будет по-старому.
Смешивать PATH login-shell и среду сервиса: корректный which openclaw в интерактивном сеансе не гарантирует того же окружения демона.
Не замечать несколько источников установки: Homebrew, официальный скрипт и npm global могут давать несколько бинарников порядком PATH.
Пропускать gateway install --force после апгрейда: когда сервис и бинарник разъехались, документация просит перезаписать обёртку; разовый ручной старт создаёт мина на следующий ребут.
Считать любую ошибку doctor признаком порчи JSON: часто это рассогласование стража и бинарника — сначала версии.
Прыгать между remote и локальным режимами без сохранений конфигов: как в статье remote: openclaw config get gateway.mode, затем куда именно должны попадать зонды.
После апгрейда смотреть только каналы, не расписание: см. чек-лист cron.
Общая причина: «конфиг читается» ещё не значит «исполнение согласовано». Правильно: отпечаток показывает только, кто последним писал, а бинарь в сервисе нужно проверять отдельно.
Таблица, чтобы из «кажется, апгрейд сломался» попасть в подписанную ветку:
| Признак | скорее split brain | скорее auth / сессия | скорее remote URL / топология |
|---|---|---|---|
| Ключевые слова doctor | про разницу версий блокирует destructive gateway | коды token/device почти без привязки к версии бинарника | RPC падает и локальный gateway status --deep указывает не туда |
| gateway status | поведение runtime явно противоречит CLI --version | runtime есть, всё ещё unauthorized | локально stopped, удалённый реально поднят |
| Сначала | PATH → gateway install --force → restart | ротация token / рукопожатие устройства | gateway.remote.url и env сверить с режимом remote |
Золотая формулировка проапгрейдной ночи: (A) какой бинарник реально крутится? (B) какой маркёр кто ставил? Сначала согласовать оба пункта, потом уже каналы и cron.
Связка Tailscale / приватный туннель: не путать «туннель есть» и «RPC здоров» — см. статью Tailscale private exposure и двустороннюю проверку.
Порядок важен: при расхождении версий один шаг назад, параллельно не резать конфиг и бинарник.
Зафиксировать след: openclaw --version, путь из unit если виден, capture doctor.
Вычистить PATH и алиасы: без TTY тоже which openclaw → на целевой релиз.
Один канал поддержки: рекомендованный npm/скрипт — не мешать навсегда старый brew и новый npm.
Переустановить обёртку сервиса: для того же пользователя после PATH openclaw gateway install --force.
Холодный рестарт gateway: openclaw gateway restart → статус → RPC.
Подтверждение: openclaw doctor → channels status --probe → cron list записан ли по-прежнему?
openclaw --version command -v openclaw openclaw gateway status openclaw doctor openclaw gateway install --force openclaw gateway restart openclaw channels status --probe
На заметку: конфликт порта, память или порядок compose — параллельно см. Gateway not ready и closed(1000) RPC, ресурс не спутываем со split brain.
Спецификация: «новая конфигурация + старый процесс» — способность испортить диск необратимо. Свежие релизы могут включать блок на destructive gateway операции — ставить переменные OPENCLAW_* только для разового восстановления (имена по текущей документации).
Важно: это не универсальный офф-свитч; узкий сценарий «понимаю риск для метаданных сервиса». По умолчанию переменная не задаётся, пока есть откат в тикете.
Инженерно: поправили PATH → переустановили сервис → полный апгрейд новым бинарником. Даунгрейд — отдельный change с аудитом если поставщик отрезает пакеты.
Внутренние KPI:
openclaw --version интерактивно и в unit systemd/launchd — должны совпасть после фикса.doctor.Ноутбуки и общие dev-машины спят и конфликтуют между пользователями. Вынести OpenClaw на удалённый Mac 24/7 с SSH и договорными диском/сетью почти всегда дешевле бесконечных «upgrade и снова split». NodeMini аренда Mac Mini в облаке: фиксированный SSH и выделенные ядра — тарифы цены аренды Mac Mini, онбординг в справочном центре. Читайте фильтром OpenClaw: наблюдаемость → cron → remote → эта заметка про расхождение после апгрейда.
Маркер «какой OpenClaw последним переписал конфиг» — если PATH всё ещё находит более старый бинарь, охранники могут отказать destructive операциям. Сперва PATH и ранбук, потом правка JSON.
Пока split brain не исключён, список cron может выглядеть здоровым, а исполнение блокируется — закончите раздел три, затем руководство cron. Ещё материалы в подборке OpenClaw.
Сопоставьте gateway.mode, gateway.remote.url и оба gateway status — подробности в remote troubleshooting; мощности — цены.