Команды которые уже гоняют openclaw gateway в интерактивной оболочке но после перевода на постоянный launchd сразу видят token_missing_config или мёртвый Dashboard обычно борются с процессами supervisord которые не унаследовали export после SSH а не с исчезнувшим секретом. Текст для разработчиков которые ставят OpenClaw Gateway семь на двадцать четыре на выделенный арендованный Mac mini в облаке KVMNODE: отделяет интерактивные сессии от заданий launchd, даёт вилку для token_missing_config, сочетает plist EnvironmentVariables с единым openclaw.json и упорядочивает launchctl kickstart с откатом. Перекрёстные ссылки на чеклист установки, апгрейд и удалённый доступ и диагностическую лестницу чтобы три статьи не повторяли один набор команд.
01

2026 Почему shell работает а launchd нет: пять мифов про окружение

Человеческие сеансы входа грузят цепочки профилей расширяют PATH HOME и временные export во время разбора. Агенты и демоны запущенные launchd стартуют из минимального окружения и не читают ~/.zshrc. Когда OpenClaw разрешает токен Gateway он комбинирует конфиги переменные окружения и каталоги state любое расхождение под supervisord даёт token_missing_config или близкую подпись пока процесс выходит за секунды или health остаётся красным. Выделенные облачные хосты помогают потому что можно заморозить набор переменных реально видимых supervisord и прикрепить к тикетам вместо истории export с ноутбука.

Если параллельно ловите split brain или переименованные ключи auth после апгрейда читайте миграцию в апгрейд и удалённый доступ. Если неясно какую команду запускать первой вернитесь к лестнице. Здесь не копируем лестницу дословно добавляем только ветки launchd.

01

Думать что plist наследует export терминала:launchd не подтягивает переменные из SSH-сессии автоматически.

02

Держать токен только в shell-профилях:может иногда работать в гибридах с cron но стабильно падает на чистых агентах.

03

Смешивать root-домен и пользовательский домен plist:владелец Unix openclaw.json должен совпадать с UserName plist иначе пути тихо расходятся.

04

Оставить ProgramArguments на старом бинарнике после апгрейда:похоже на токен но исполняет не ту сборку.

05

Винить CPU на удалённом M4 Pro:сбои чтения токена редко монотонно коррелируют с графиками CPU.

После этих границ перенос региона относится к базовой истории постоянной работы постоянная настройка здесь только чтение конфигурации supervisord.

SSH-мультиплексирование добавляет шум: люди открывают Dashboard через форвард в интерактиве а демон bind на другой loopback или пользователя поэтому зелёно у людей красно у мониторов. Зафиксируйте адреса слушателей режимы bind и проверки токена на одной странице runbook и пометьте временные форварды против прод plist-топологии.

Если тот же хост крутит self-hosted CI или тяжёлые Archive пики CPU и ротация логов могут в том же окне утопить важные строки даже при исправных токенах. Выделите тише лог-окно или снизьте болтливость чужих компонентов на время инцидента.

Когда финансы спрашивают покупать ли ещё одно SKU ядра сначала отвечайте доказательствами окружения: приложите diff supervisord env и штамп пути plist к тикету чтобы показать дрейф supervisord а не голод CPU.

02

Матрица: токен в env plist против только openclaw.json и как отделить split brain

Единый источник правды значит постмортем может одной фразой сказать кто какой путь читал. Практичный компромисс держит секреты в защищённом openclaw.json а plist вводит только не секретные локаторы вроде корня state или имени профиля избегая длинных дубликатов токена. Когда CLI и демон читают разные копии файлов логи похожи на split brain сравните штампы путей openclaw doctor до переустановки.

Стратегияподходитрискзаметка ops
только openclaw.jsonодин пользователь арендованный узелслабый chmod утечкапарить с выделенным Unix-пользователем
plist EnvironmentVariables для путейнужно зафиксировать корень stateопечатка жёсткий отказблизко к явным блокам env systemd
дублировать токен открытым текстом в обоихкороткий разборротация пропустит сторонузапретить как постоянное состояние
подпись логавероятный кореньследующий шаг
token_missing_config только под launchdsupervisord не хватает ключей или путейlaunchctl print против plist и UserName
версии CLI и демона различаютсяsplit brainсекция ремонта PATH на лестнице
интерактив и без присмотра оба падаютсломанный конфиг или переименованные ключичеклист миграции токена в статье апгрейд

Первый принцип launchd: сначала печать supervisord окружения потом спор о значении токена.

Сочетайте зонды без присмотра выравнивая ключи shell зондов с ключами plist чтобы полуночные скрипты оставались зелёными пока launchd краснеет только когда нужно.

Когда gateway.mode remote смешан с локальными резидентами добавьте вторую таблицу окружение клиента против plist сервера удалённые клиенты читают другие пути токена чем облачные демоны вставьте оба лога в один тикет без ролей и вы ошибочно классифицируете дыры клиента как дыры сервера.

Полугодовые аудиты должны ловить plists указывающие на устаревшие home после ухода подрядчиков такой дрейф редко ломает сборки но может вернуть петли токена после тихого ребута.

03

plist EnvironmentVariables и launchctl: минимальная репродукция и XML-скелет

Перед прод plist запланируйте одноразовый LaunchAgent который гоняет /bin/sh -lc 'env | sort' чтобы снять реальный набор supervisord ключей затем подставьте настоящие аргументы openclaw gateway. На арендованных узлах часто не хватает PATH для Homebrew или npm global даётся doctor ок демон нет. Заморозьте минимальный PATH в тикете вместо десятков префиксов с ноутбука.

XML
<key>EnvironmentVariables</key>
<dict>
  <key>PATH</key>
  <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
  <key>OPENCLAW_STATE_DIR</key>
  <string>/Users/ocagent/.openclaw</string>
</dict>

Заметка:настоящие секреты держите в openclaw.json под gateway.auth через поддерживаемые писатели фрагмент показывает только локаторы.

После правок используйте launchctl bootout затем bootstrap или эквивалент домена kickstart -k чтобы старые процессы не держали старые кэши env. Если Gateway всё ещё читает старый токен подозревайте второй дубликат plist в том же пользовательском домене и дедуплицируйте launchctl list | grep -i openclaw.

Для Node через nvm или fnm закрепите абсолютные пути node и openclaw в plist вместо того что which даёт в shell иначе малые бампы образа дают skew doctor pass daemon fail.

Если создан отдельный системный пользователь для Gateway выровняйте WorkingDirectory и неявный HOME на этот home чтобы относительные пути не падали в пустые временные каталоги откуда отскакивают подписи missing token.

04

Шесть шагов от демо в shell к аудируемому launchd

01

Заморозить репродукцию:снять env | sort для успешной интерактивной и падающей supervisord плюс текст openclaw gateway status.

02

Сравнить launchctl print:подтвердить Label ProgramArguments UserName WorkingDirectory.

03

Унифицировать единый источник:переписать openclaw.json поддерживаемыми средствами убрать дубли секретов из plist.

04

Заполнить EnvironmentVariables:минимум PATH и корень state при необходимости явные ключи бинарника node.

05

kickstart и первые двести строк лога:перекрёстно с doctor в лестнице.

06

Runbook и строка изменения:записать регион и SKU ближний против дальний M4 Pro поля заказа к форме заказа.

05

Цитируемые факты: домен plist пара логов бюджет ложных срабатываний M4 Pro

A

Домен агента против демона:владелец файловой системы openclaw.json должен совпадать с идентичностью plist иначе чтение и запись расходятся.

B

отсутствие токена в том же кадре что мгновенный выход:сначала подозревайте окружение а не квоту upstream API.

C

удалённый регион M4 Pro:чуть более высокая параллельность зондов не должна маскировать неверные пути токена запекайте пороги в скрипты.

Внимание:вставлять токены в чат или общие заметки это риск цепочки поставок предпочитайте хранилище или ограниченные файлы.

Держать токены только в истории shell или временных export хорошо для демо но делает постмортемы семь на двадцать четыре невоспроизводимыми. Выровнять plist с одним защищённым openclaw.json на выделенных облачных узлах Apple Silicon превращает Gateway в аудируемый производственный компонент. Для команд которым нужны стабильные Dashboard и пути зондов через Сингапур восток США или другие регионы аренда Mac mini в облаке KVMNODE обычно лучше подходит: изоляция bare metal прозрачная география ступени конфигурации эластичные сроки аренды поля читаемые финансом для наборов supervisord окружения. Далее цены аренды и центр помощи для SKU и связности.

После запуска добавляйте к CMDB или тегам стоимости время последнего успешного kickstart label plist штамп версии OpenClaw чтобы финансы видели несёт ли узел ещё обязанность Gateway а не гадали по hostname.

Если планируете несколько экспериментальных Gateway на одном арендованном хосте дайте каждому свой каталог state и диапазон портов и внесите whitelist на файрволе чтобы случайные коллизии портов не читались как ошибки токена.