Боли: почему restart «врёт»
Боль 1: тихий штамп схемы. Новый билд переписывает openclaw.json при первом запуске; JSON выглядит валидным, но мутации сервиса стабильно падают в продакшене, потому что старый бинарник видит более новый stamp и намеренно останавливается.
Боль 2: шизофрения PATH. Homebrew, глобальный npm и ручные symlink разводят which openclaw и реальный бинарник launchd, часто бесшумно.
Боль 3: дубли супервизоров. Deep перечисляет хвосты экспериментов; doctor и install конфликтуют, пока дубли живы.
Боль 4: ложный след pairing. Сначала версии и PATH, потом pairing.
Боль 5: remote URL. Если gateway.remote.url указывает на выведенный хост, симптом похож; разделяйте через which -a.
Слои: отказ старого бинарника vs реальная порча
L0 зафиксируйте openclaw --version и сводку gateway status.
L1 сравните meta.lastTouchedVersion с мажорной линией CLI; если файл новее, остановите мутации со старого бинарника.
L2 выполните openclaw gateway status --deep и сохраните подсказки по системным юнитам.
L3 после выравнивания PATH — openclaw doctor; doctor --fix только на совпадающем бинарнике и с контекстом аудита 4.14.
L4 зелёный RPC перед channels status --probe; иначе каналы и тихий Telegram.
Поля тикета: минимальный пакет доказательств
Две строки версий, пути Config(cli)/service, meta.lastTouchedVersion, which -a openclaw, имена юнитов, выдержка deep, почасовые дельты в окне апгрейда.
На фермах удалённых Mac добавьте CPU и IO, чтобы не спутать голод диска с RPC; см. двухэтапный CI.
Матрица решений
| Сигнатура | Смысл | Первый шаг | Избегать |
|---|---|---|---|
| Отказ мутации | lastTouchedVersion новее CLI | PATH на новый dist, затем install --force | doctor --fix на старом бинарнике |
| Deep показывает дубли | старые plist/systemd | Отключить лишнее по подсказкам | два launchd параллельно |
| Только пути Config различаются | HOME drift | Выровнять EnvironmentFile и shell | JSON без reload |
| Красный RPC и плохой URL | remote | Статья remote | pairing при плохом URL |
Семь шагов
- Заморозить
gateway statusи--deep(маскирование). - Список
which -a openclawи целей symlink. - Выровнять PATH shell и супервизора; абсолютные пути в plist при необходимости.
- Проверить версии до мутаций.
openclaw gateway install --forceи холодный рестарт.- Цикл doctor до нуля блокеров.
- Базовая линия: p95 RPC и успешное действие UI.
Пример
which -a openclaw
openclaw --version
openclaw gateway status --deep
openclaw doctorУглубление: эксплуатация, комплаенс, наблюдаемость
Журнал PATH после brew
Каждый апгрейд Homebrew может сдвинуть Cellar, пока launchd экспортирует старый PATH. Фиксируйте строку из plist после каждого касания OpenClaw и сравнивайте с which openclaw из неинтерактивной оболочки. Без журнала split-brain возвращается при успешных логах пакетного менеджера.
Логи без токенов в открытом виде
В тикетах только префиксы или хэши токенов, не полные значения в мессенджерах. Для GDPR фиксируйте, какие пайплайны могут нести персональные данные. В архивах deep маскируйте домашние пути.
Дубли launchd
Два лейбла с одним бинарём создают гонку портов. Deep должен перечислить оба; выберите канонический лейбл и отключите второй с меткой времени. Откат должен восстановить один источник правды.
systemd user vs system
Пользовательский юнит умирает без linger. Split-brain возникает, если ждут системные пути. Проверьте loginctl и согласуйте unit с реальным аккаунтом установки.
doctor --fix на старом бинаре
Хардненинг задаёт порядок трансформаций. Старый бинарь может частично записать то, что новый отвергнет. Сначала PATH на свежий build и релиз-ноты аудита.
Хаос-учение PATH
Временно подставьте wrapper с высоким приоритетом и измерьте время до алерта. Документируйте тексты алертов, чтобы on-call не гадал.
Постмортем с путём
Явно указывайте разрешённый путь бинаря, не только семвер. Добавляйте diff plist. Это снижает племенные знания.
Ночной сравнение PATH
Сравнивайте путь из неинтерактивной оболочки с PATH супервизора. Малые расхождения — ранний сигнал. Добавьте лёгкую RPC-пробу из того же класса shell.
npm vs brew порядок
Если npm раньше brew, глобальный openclaw часто побеждает. Задайте канонический порядок в IaC для продакшена.
Digest образа
Пиньте digest контейнера и храните рядом версию openclaw и meta-штамп. Базовые образы не должны крутиться незаметно.
WSL и натив
Не два супервизора для одного шлюза. Документируйте владельца апгрейдов. На Windows экспортируйте планировщик.
Шторм reconnect
Клиенты открывают WebSocket одновременно; без backoff растёт CPU при верном PATH. Симулируйте отдельно от split-brain.
RACI
Владелец PATH и владелец unit-файлов. Параллельные reload без ролей оставляют противоречия.
Экономика Mac
Ночные смены только за PATH окупают аренду управляемого Mac быстрее героизма. Токены остаются у вас.
Чеклист апгрейда
Строка: подтверждён путь бинаря до объявления успеха. Предотвращает сюрпризы.
Аудит 4.14
Читайте аудит до агрессивных флагов doctor. Ведите таблицу совместимости минорных линий.
Тишина Telegram
Зелёный RPC и молчание каналов — runbook Telegram, не PATH.
Pairing после L1
Pairing не чинит бинарный дрейф. Сначала официальная лестница статуса.
Ретеншн снимков
Первые строки gateway status после апгрейда с хэшем для дифф между релизами.
IO vs RPC
rsync может насытить диск и замедлить RPC без meta. Коррелируйте iowait.
Blue-green путей
Атомарно переключайте symlink и plist в одной транзакции для /opt версий.
Обучение
Тренируйте чтение which -a в каждом тикете.
Tarball отката
Заранее определите последнюю хорошую версию и время отката.
Кардинальность
Не раздувайте лейблы метрик per-user.
SLA вендора
Вендор не заменяет внутренние проверки PATH.
Тикет-коммуникация
Скриншоты deep и plist PATH в одном комментарии.
LaunchAgent vs Daemon
Разные контексты root и user дают классический split-brain при апгрейдах в терминале.
CI runner
PATH раннера должен соответствовать launchd на цели при restart из пайплайна.
Wiki без пустых слов
Каждая рекомендация — тикет с owner и сроком.
Часовые пояса
Сериализуйте reload между командами.
Canary dist
Сначала малый хост, 24 часа deep, затем широкий rollout.
Видео и Git
Видео дополняет, команды живут в репозитории.
Ротация токенов
Не накладывайте на бинарный апгрейд в один уикенд без нужды.
mtime vs лог
Сравните время файла конфигурации с отказами сервиса.
Гейт закрытия
Три зелёные пробы из двух сетей и успешный UI-клик.
Ansible guard
Идемпотентная проверка ожидаемого абсолютного пути openclaw.
Алерты
Имена алертов должны отличать skew PATH от реальной RPC-аварии.
Point release smoke
После macOS patch перезапустите unit и сравните пути до DNS.
Хэш JSON
После ротации токенов сохраняйте хэш JSON для споров > фактов.
On-call роли
Наблюдатель, мутатор, approver разделены.
Чеклисты
Короткие списки в инфра-репо лучше длинных статей без шагов.
Финансы
Свяжите минуты простоя с on-call стоимостью для обоснования аренды.
Security сроки логов
Согласуйте хранение deep-логов без персональных данных.
Квартальный откат
Репетируйте откат на предыдущий dist с таймером.
Канонический префикс
Одна строка в репо: истинный dist для прода.
Корпоративный прокси
Проверяйте checksum скачанного бинаря после прокси.
Hostname
Согласуйте hostname в plist с мониторингом.
Keychain
Документируйте очистку старых секретов UI после ротации.
Staging prod
Не смешивайте plist staging на прод.
Длинные пути
Проверяйте лимиты длины путей Cellar.
Rosetta
Не путайте arm64 и x86_64 в PATH на Apple Silicon.
Node версия
Согласуйте Node в plist с CLI если openclaw зависит от Node.
Ручные symlink
Каждый symlink в /usr/local/bin требует тикета.
Plist diff CI
Пайплайн падает при скрытом изменении PATH.
Бэкап перед force
Всегда бэкап openclaw.json и credentials перед install --force.
Металл и пропускная способность
На Apple Silicon важно понимать, что два разных бинаря arm64 и x86_64 под Rosetta могут сосуществовать в разных префиксах; если plist указывает на x86_64, а оператор запускает arm64 в терминале, вы увидите расхождение версий без явной ошибки сети. Документируйте архитектуру в каждом хост-профиле и добавьте в ночной чек контрольную сумму бинаря, а не только строку версии.
Лимиты длины пути
Очень глубокие пути в Cellar иногда ломают старые скрипты деплоя, которые обрезают строки; визуально кажется, что openclaw «пропал», хотя на самом деле symlink повреждён. Проверяйте длину пути и корректность symlink после каждого крупного обновления macOS.
Корпоративный прокси и артефакты
Если бинарь скачивается через кэширующий прокси, убедитесь, что контрольная сумма совпадает с ожидаемой; иначе вы можете получить частично загруженный файл, который ведёт себя как старая версия, хотя метаданные пакета уже новые.
Разделение staging и production
Копирование plist из staging на прод без пересмотра PATH — частый источник split-brain. Запретите такие шаблоны в ревью инфраструктуры и требуйте отдельные канонические пути для каждой среды.
Keychain и UI-секреты
macOS может хранить старые токены в связке ключей для GUI, пока launchd читает новые из файла; это не всегда split-brain по бинарю, но симптомы схожи. Документируйте шаг очистки или перевыпуска секретов для UI после сервисных изменений.
Согласованность hostname
Если мониторинг стучится на одно имя, а plist ссылается на другое локальное имя, RPC-пробы могут быть зелёными в одном контексте и красными в другом. Выровняйте имена до разбора meta.lastTouchedVersion.
Финансовая модель on-call
Переведите минуты простоя и количество ночных перезапусков в деньги; аренда удалённого Mac с готовой observability часто дешевле, чем постоянные авралы без автоматизации PATH.
Короткие чеклисты в Git
Длинные вики-статьи без исполняемых шагов не спасают при инциденте. Держите один экран чеклиста рядом с репозиторием инфраструктуры и обновляйте его после каждого постмортема.
Роли в эскалации
Разделите наблюдателя, мутатора и approver для продакшн-reload; это снижает риск одновременных правок plist и JSON, которые потом невозможно воспроизвести.
Хэш JSON после ротации
После смены токенов сразу сохраните хэш релевантного JSON и строку версии openclaw; споры о том, «что именно читал демон», станут короче и фактологичнее.
Дымовой тест после point release
После патча macOS перезапустите ту же unit, снимите свежий gateway status и сравните пути до любых изменений DNS или сертификатов; так вы отделяете платформенный дрейф от split-brain.
Именование алертов
Называйте алерты так, чтобы дежурный сразу видел: это skew PATH, это провал install --force или это реальная недоступность RPC; иначе каждый инцидент начинается с нулевой гипотезы.
Идемпотентные проверки в Ansible
Закодируйте ожидаемый абсолютный путь openclaw как обязательное условие успеха плейбука; любой дрейф должен валить прогон до продакшена, а не маскироваться зелёными задачами.
Гейт закрытия тикета
Требуйте три зелёные RPC-пробы из двух независимых сетей и один успешный UI-жест перед закрытием; субъективное «кажется работает» после правки PATH недопустимо.
Форензика mtime и логов
Сравните время модификации openclaw.json с временными метками отказов сервиса; расхождения намекают на ручные копии или восстановление из бэкапа без согласованного бинаря.
Декуплинг ротации токенов
Не совмещайте массовую ротацию секретов и бинарный апгрейд в один уикенд без крайней необходимости; иначе журналы перестают однозначно указывать первопричину.
Видео и машиночитаемый runbook
Короткие видео полезны для онбординга, но исполняемые команды должны жить в Git рядом с версией; иначе знание уезжает в личные заметки.
Canary для новых dist
Сначала выкатывайте новый префикс dist на малой группе хостов, собирайте deep сутки, затем расширяйте; это ловит редкие конфликты plist, которые не видны на одной машине.
Передача между часовыми поясами
Сериализуйте reload между командами в разных регионах или используйте явную блокировку изменений, чтобы не получить два несовместимых plist в одну минуту.
Wiki без пустых лозунгов
Каждая рекомендация должна иметь тикет, владельца и срок; иначе страница «важно следить за PATH» не меняет поведение команд.
CI runner и целевой launchd
PATH self-hosted runner должен соответствовать тому, что реально видит launchd на удалённом Mac при удалённом restart; сравнивайте после каждого обновления секретов или образа runner.
LaunchAgent против LaunchDaemon
Пользовательские агенты и системные демоны имеют разные контексты HOME и PATH; классический split-brain возникает, когда апгрейд делают в пользовательской сессии, а сервис крутится как root с другим префиксом.
Коммуникация в тикете
Требуйте в одном комментарии скриншот deep и фрагмент plist с PATH; без этого инженеры спорят разными фактами.
SLA вендора
Аппаратный SLA не заменяет внутренние проверки разрешённого пути бинаря; документируйте, какие метрики остаются вашей ответственностью даже при аренде железа.
Кардинальность метрик
Не раздувайте кардинальность метрик per-user на каждой временной серии; держите среду и мажорную версию, иначе стоимость хранения съест бюджет без диагностической отдачи.
Tarball отката
Заранее определите последнюю известную хорошую версию пакета и измерьте время отката; при стрессе split-brain это сокращает среднее время восстановления.
Обучение чтению which -a
Регулярно тренируйте команду различать семантическую версию и фактический путь на диске; это дешёвый навык, который предотвращает дорогие ночные расследования.
Blue-green для путей
При версионированных каталогах в /opt переключайте symlink и обновляйте plist в одной транзакции, чтобы не оставить окно, где сервис указывает на смесь старого и нового.
IO против RPC
Тяжёлый rsync артефактов может поднять iowait и задержать RPC без изменения meta.lastTouchedVersion; коррелируйте дисковые метрики, прежде чем крутить PATH.
Ретеншн снимков
Храните первые строки gateway status после апгрейда с хэшем для сравнения релизов без дублирования секретов в долгоживущих логах.
Pairing только после зелёного L1
Pairing решает идентичность устройства, а не рассинхрон бинарников; не тратьте шаги onboarding, пока PATH и версии не согласованы.
Тишина Telegram
Если RPC зелёный, а каналы молчат, следуйте runbook Telegram и каналов, а не возвращайтесь к переустановке PATH — иначе вы создадите новый дрейф.
Аудит 4.14 перед doctor --fix
Агрессивные флаги doctor на несовместимой минорной линии могут оставить JSON в частично записанном состоянии; читайте материалы аудита и внутреннюю таблицу совместимости.
Чеклист апгрейда
Добавьте строку «разрешённый путь бинаря подтверждён» перед объявлением успеха; это простой ритуал, который отсекает большинство сюрпризов split-brain.
Экономика ночных смен
Если инженеры ночами только выравнивают PATH и plist, сравните стоимость часов с арендой управляемого удалённого Mac, где observability и единый супервизор уже базовые.
RACI для PATH и unit-файлов
Назначьте владельцев строк PATH и файлов launchd/systemd; параллельные правки без ролей почти гарантируют противоречивые reload.
Шторм переподключений
Симулируйте массовое переподключение WebSocket после короткого падения; без backoff CPU может всплеснуть даже при корректном PATH, и это не следует путать с бинарным конфликтом.
WSL и Windows
Не позволяйте двум сторонам Windows одновременно владеть одним шлюзом; экспортируйте задания планировщика и сравните с официальным runbook.
Digest образа контейнера
Фиксируйте digest вместе с версией openclaw и meta-штампом, чтобы базовые обновления образа не меняли бинарь незаметно для команды.
Порядок npm и brew
Если npm стоит раньше brew в PATH, глобальный openclaw может побеждать brew-ссылку; закрепите порядок в конфигурации для продакшн-хостов.
Ночной контроль PATH
Сравнивайте nightly путь из неинтерактивной оболочки с PATH из супервизора и добавьте лёгкую RPC-пробу из того же класса автоматизации.
Постмортем с путём
Каждый постмортем обязан содержать полный путь бинаря и, по возможности, diff plist; это снижает повторяемость инцидентов на пустых обсуждениях версий.
Хаос-учение PATH
Периодически подсовывайте wrapper с высоким приоритетом и проверяйте, срабатывает ли мониторинг; без учений команды переоценивают зрелость наблюдаемости.
doctor --fix на старом бинаре
Старый бинарь может применить частичные трансформации, которые новый отклонит; сначала выровняйте PATH, затем читайте релиз-ноты безопасности.
systemd user и linger
Пользовательский юнит без linger исчезает с сессией; не интерпретируйте это как порчу JSON, пока не проверите контекст учётной записи.
Дубли launchd
Два лейбла на один бинарь создают гонку; выберите канонический, отключите второй документированно и обеспечьте откат одной кнопкой.
Логи без секретов
Маскируйте домашние каталоги и токены в архивах deep; это снижает риск GDPR и утечек при шаринге тикетов.
Связанные материалы
Remote: матрица. Pairing: runbook. Install: гайд.
Ноутбук, сон и несколько менеджеров пакетов раздувают дисперсию; аренда всегда включённого удалённого Mac с управляемым шлюзом часто снижает совокупную стоимость для 7x24 и файловых пайплайнов, сохраняя ваши токены и runbook у себя и упрощая наблюдаемость.
FAQ
Хватит ли переустановки?
Только после очистки PATH и дубликатов; иначе переустановка снова привяжет неверный бинарник и цикл повторится.
Docker и bare metal?
Один паттерн супервизии; deep должен показать канонический путь до возврата продуктивного трафика.
Зачем SFTPMAC?
Единая бинарная правда, стабильный вход и колокализованные артефактные пайплайны снижают дрейф PATH/plist, а токены и политики остаются у вас, с более простым сбором доказательств для аудита.
