Серверная OpenClaw launchd

2026 OpenClaw демон и launchd:
логи и восстановление

Командам, которым нужен OpenClaw 24/7, мешают три вещи: SSH закрывается и процесс исчезает, launchd грузит задачу, но она сразу выходит, либо после падения неочевидно, куда смотреть. Здесь — openclaw onboard --install-daemon, отличия пользовательского LaunchAgent от переднего плана, таблица, пять шагов восстановления, три метрики и ссылки на установку, FAQ по аренде, ошибкам команд и прод-гайд.

01. Три болевые точки

Запустить OpenClaw как долгоживущего ассистента кажется простым, пока ноутбук не засыпает, SSH не рвётся, а логи не исчезают вместе с сессией. Этот материал для операторов macOS, которые уже прошли базовую установку и теперь хотят надёжности уровня launchd: предсказуемые перезапуски, единый журнал и восстановление без гадания по симптомам.

1) Процессы, привязанные к сессии: интерактивный запуск в Терминале или по SSH умирает на hangup; без launchd сервис останавливается при закрытии оболочки или сне машины.

2) Устаревшие пути в plist: после смены Node или CLI LaunchAgents всё ещё указывают на старые бинарники — задача «загружена», но выходит с непрозрачным кодом.

3) Раздельные логи: один stdout не показывает отказы TCC и сообщения ядра, которые видны в log show, поэтому разбор превращается в угадайку.

Глобальные обновления CLI без перезагрузки агента дают рассинхрон «новый CLI, старый демон»; фиксируйте изменения plist в git или тикетах после каждой правки. Имеет смысл заранее описать, кто в команде владеет меткой задачи и рабочим каталогом, чтобы при онбординге новых людей не появлялись дубликаты и конфликтующие сокеты.

Отдельно стоит договориться о языке статусов в тикетинге: «не отвечает вебхук» и «демон не загружен» — разные классы инцидентов, и смешение формулировок растягиет эскалации. Короткий runbook на одну страницу с командами launchctl и примерами предикатов для log show экономит часы при первом ночном сбое, когда никто не помнит точный синтаксис вашей версии macOS.

02. Что делает openclaw onboard --install-daemon

Команда онбординга не волшебство — это каркас файлов и путей. Понимание того, какие файлы она трогает, ускоряет отладку после обновления ОС или ручного brew upgrade node.

Обычно создаётся пользовательский plist в LaunchAgents, выравниваются пути окружения и рабочего пространства, настраивается автозапуск после входа. Устанавливайте под тем же пользователем macOS, который будет грузить агент — смешение sudo и GUI-аккаунта — частая причина сбоев. Начните с гайда по установке и развёртыванию OpenClaw, затем переходите к ужесточению демона.

На машинах с посуточной арендой закладывайте потерю данных при освобождении: сохраняйте ключи воркспейса и копии plist; подробности и типовые ловушки — в FAQ по посуточной аренде Mac. Если GUI-вход и SSH дают разный PATH, пропишите EnvironmentVariables; в ProgramArguments предпочтительны абсолютные пути к бинарникам.

Дублирующиеся Label или порты между dev и prod вызывают «дрожание» задач; пространствуйте имена и сокеты по окружениям. Запросы приватности (Accessibility, контакты) часто требуют однократной GUI-сессии — краткий VNC на арендованном Mac, затем снова SSH для обслуживания.

03. Передний план против launchd

Измерение Передний план Пользовательский LaunchAgent
НазначениеОтладка, первый запускДолгая работа без присмотра
Жизненный циклЗаканчивается с терминалом/SSHУправляется launchd, KeepAlive по желанию
РазборВывод в терминалlaunchctl, Console, log show, plist

Сопоставляйте коды выхода с FAQ по ошибкам команд OpenClaw. Чрезмерный KeepAlive без исправления конфига порождает штормы перезапусков — сначала стабилизируйте настройки в переднем плане.

04. Пять шагов восстановления

На инциденте держите шаги линейными: прыжок сразу к переустановке часто скрывает корень в plist с той же опечаткой.

  1. launchctl list | grep -i openclaw — зафиксируйте PID и LastExitStatus. Если задачи нет, убедитесь, что plist загружен для правильного GUI-пользователя (gui/$(id -u)), а не в системном домене root по ошибке.
  2. log show с предикатом по node/openclaw за последний час; приложите вывод к тикету. Расширьте фильтр, если он слишком узкий — часть падений видна в сообщениях com.apple.xpc.launchd с вашей меткой.
  3. Откройте ~/Library/LaunchAgents/*.plist — проверьте ProgramArguments, WorkingDirectory, права на запись. Помните: launchd не всегда раскрывает ~ так же, как интерактивная оболочка, если это явно не настроено.
  4. launchctl bootout для задачи, исправьте plist, затем bootstrap/load по документации вашей версии macOS. На старых системах были unload/load — закрепите точные команды в runbook, чтобы под давлением не путать мышечную память.
  5. Откатите OpenClaw или снова выполните openclaw onboard --install-daemon; удалите дублирующие plist. После отката прогоните те же дымовые тесты, что и после установки, чтобы каналы и вебхуки отвечали.
ls ~/Library/LaunchAgents/ | grep -i openclaw
launchctl list | grep -i openclaw

Разбирайте систему раньше приложения: место на диске, синхронизация времени, DNS/TLS — иначе вы будете крутить конфиг приложения при инфраструктурных сбоях. Ведите plist в контроле версий на общих сборочных Mac.

Если в организации приняты «золотые образы» macOS, проверьте, что post-install скрипты не затирают ~/Library/LaunchAgents при каждом логине — иначе исправления живут до следующего деплоя. Зафиксируйте в политике, может ли MDM перезаписывать пользовательские агенты и кто утверждает исключения для OpenClaw.

05. Метрики и слабый облачный Mac

  • 1: Снимайте unified log в течение 15 минут после сбоя, пока ротация не стёрла контекст.
  • 2: Длительная загрузка RAM >80 % повышает риск OOM для Node-демонов — особенно на конфигурациях с 8 ГБ.
  • 3: Сбои с фиксированным коротким интервалом чаще про конфиг; случайные интервалы намекают на ресурсы, заполненный диск или сетевые обрывы.

Тяжёлый Xcode или симуляторы, конкурируя за CPU, голодаяют цикл событий — разносите нагрузку или машины. Для большего объёма RAM и стабильных хостов см. тарифы MacDate и гайд по удалённому доступу. Паттерны контейнерного продакшена (если применимы) — в гайде по прод-развёртыванию в пяти шагах; нативный macOS по-прежнему опирается на launchd.

06. tmux против выделенной аренды Mac

Еженедельные проверки здоровья: выгрузите статус launchctl list, свободный диск и задержку API в таблицу. tmux/screen/nohup не спят вместе с сессией, но не дают стандартизированных проверок plist; launchd встраивается в энергополитику и поведение после перезагрузки. Для предсказуемого восстановления и поисковых логов предпочитайте корректно онборденный демон — или изолируйте эксперимент на посуточной аренде, чтобы доказать стабильность до долгосрочных обязательств.

Завершите валидацию установки, примените этот чеклист и сверьтесь с FAQ по ошибкам. Недорогие пробы: посуточная аренда против локальной стоимости. Планы: цены. Детали SSH/VNC и биллинга — снова в FAQ по посуточной аренде.

07. Ключи plist, которые решают для демонов OpenClaw

Помимо Label и ProgramArguments, несколько ключей меняют надёжность. WorkingDirectory должен существовать до старта задачи; если онбординг создал симлинк, который потом сломался, агент завершится сразу. RunAtLoad определяет автозапуск при загрузке plist — удобно для серверов и иногда неожиданно на ноутбуках. ThrottleInterval снижает нагрузку от циклов падений; сочетайте с реальным исправлением, а не с маскировкой ошибок. EnvironmentVariables должны повторять то, от чего зависела интерактивная оболочка (PATH, NODE_OPTIONS, переопределения хостов API). Задокументируйте каждый ключ во внутренней вики, чтобы апгрейды не «тихо» убрали нужные переменные.

При нескольких окружениях агрессивно разводите значения Label. Дубликаты приводят к тому, что второй plist молча конфликтует с первым. Используйте префиксы вроде com.yourorg.openclaw.prod и .staging; на современном macOS проверяйте эффективный граф через launchctl print gui/$(id -u).

08. Логирование: Unified Logging, файлы и ротация

Один вывод Терминала перестаёт хватать после демонизации. На инцидентах используйте log stream или log show с предикатами; при необходимости добавьте StandardOutPath и StandardErrorPath в plist для долговечных текстовых логов — следите за ростом диска и ротируйте или обрезайте файлы по политике. Токены в stderr могут попасть в файлы; ограничьте права и вычищайте артефакты перед внешней передачей.

Сопоставляйте метки времени launchd с собственными логами OpenClaw, если они есть. При путанице из-за повторного использования PID добавляйте UUID сессии загрузки из заголовков log show --style syslog. На арендованных Mac копируйте логи до освобождения инстанса: эфемерные диски следующего арендатора могут не сохранить следы.

09. Сон, питание и «безголовые» облачные Mac

Ноутбуки засыпают; многие облачные Mac настроены как рабочие станции. Если включается Power Nap или сон, фоновая сеть может замирать непредсказуемо. Для всегда включённых агентов отключайте сон от сети там, где политика позволяет, через pmset, либо временно используйте caffeinate как мост. Фиксируйте, кто имеет право менять профили энергии — «добрые» дефолты часто возвращают сон и убивают ночные задачи.

В стойках с Mac mini проверьте тепловое поведение под длительной нагрузкой Node. Троттлинг проявляется как «случайная» задержка исходящих вебхуков при отсутствии явного краша процесса.

10. Права, TCC и запросы только из GUI

Функции OpenClaw, затрагивающие запись экрана, accessibility или локальные календари, могут требовать одобрений Transparency, Consent, and Control, которые показываются лишь в графической сессии. Чистый SSH-демон может зависнуть, ожидая ввод, который удалённо недоступен. Пройдите первичное согласие через VNC один раз, экспортируйте чеклист выданных прав и при разрешении ИБ снимите политику TCC. При пересоздании пользователей или переносе plist ожидайте повтор отдельных запросов.

На Apple Silicon под Rosetta убедитесь, что plist указывает на нужную архитектуру; смешанные деревья arm64/x86_64 для Node давали загадки «в login shell работает, под launchd нет», потому что shell подхватывал хуки nvm, недоступные демону.

11. Обновления и откат

Относитесь к апгрейдам OpenClaw как к любой прод-зависимости: фиксируйте версии, читайте release notes, гоняйте на непродакшен Mac. После обновления сделайте launchctl bootout и перезагрузку задачи, чтобы подтянулся новый путь к бинарнику. Храните предыдущее дерево node_modules или архив lock-файла для быстрого отката. Автоматизируйте дымовой тест — health endpoint или CLI ping — который обязан пройти до пометки демона здоровым в мониторинге.

Когда нужен изолированный железный стенд для репетиции без риска для ноутбука, короткая посуточная аренда Mac позволяет отработать правки plist, диалоги прав и циклы перезагрузки launchd с малыми затратами. После недели синтетической нагрузки без сюрпризов переносите тот же шаблон plist на общую инфраструктуру — меньше шума на пейджере и стабильнее отклик OpenClaw на ваши сценарии.

12. Мониторинг, хуки и синтетические проверки

Прод-демоны заслуживают ту же наблюдаемость, что и API. Экспортируйте лёгкую команду здоровья — хоть тривиальный openclaw status или HTTP ping — чтобы стек мониторинга опрашивал её каждую минуту. Алертите на три последовательных провала, не на каждый глитч. Сочетайте проверку процесса с алертами по логам, когда unified logging содержит явные сигнатуры ошибок, не видные по exit code.

Планируйте ночную синтетическую беседу или вызов инструмента по каналам, которые важны (чат, почта, ФС). Пишите длительность и успех; нарастающее замедление часто предшествует жёстким сбоям при утечках памяти или лимитах дескрипторов. Держите дашборды рядом с мониторингом ферм сборки, чтобы дежурному не понадобился второй логин.

Опишите уровни серьёзности: жёлтый — перезапуск агента; красный — фейловер на запасной Mac или откат релиза. Привяжите уровни к конкретным командам (launchctl kickstart, перезагрузка plist, понижение пакета), чтобы ночные страницы были исполнимы под стрессом. Раз в квартал устройте game day: кто-то ломает plist на стенде, команда отрабатывает восстановление на время — дыры в документации всплывают быстро.

Интегрируйтесь с инвентаризацией: серийники или арендные инстансы с OpenClaw, версия plist, владелец апрувов на апгрейд ОС. Дрейф конфигурации по флоту сложнее одного кривого ноутбука, но примитивы launchd те же — только масштаб больше.

13. Безопасность всегда включённого агента

Демон под тем же аккаунтом, что грузит plist, наследует его привилегии. Относитесь к аккаунту как к сервисной идентичности: минимум прав на диск, без лишнего админа, секреты в связке ключей macOS или vault — не в открытом виде в plist в git. Ротируйте API-ключи в том же ритме, что и токены CI, и документируйте, кто может провести ротацию без полной перезагрузки хоста.

Сетевой исходящий трафик делайте явным. Если OpenClaw нужен лишь набор эндпоинтов, ограничьте их хостовым фаерволом или исходящим прокси там, где политика позволяет. Разделяйте логи отказов соединения и ошибок приложения, чтобы отличать права от временных DNS-сбоев. Для удалённых флотов Mac согласуйте VPN или Zero Trust с регионами, куда стучится автоматизация, иначе всплывут геоблоки.

Резервируйте снимок plist и окружения при каждой смене версии. Tar ~/Library/LaunchAgents, релевантные профили shell и редоктированный вывод launchctl print дают аудиторам и «вам через год» воспроизводимую базу. К журналу изменений добавляйте дату, оператора, причину и команду отката — скучная бюрократия дешевле героического дебага.

Когда ассистент выполняет инструменты или скрипты, сужайте доступ к ФС: выделенные рабочие каталоги, без world-writable путей, периодические проверки целостности, если бинарники пользователь-обновляемы. На общей аренде между экспериментами обнуляйте состояние или разделяйте учётки, чтобы LaunchAgents не унаследовали чужие токены.

В план реагирования включите аварийное отключение: выгрузка агента, отзыв учётных данных, уведомление заинтересованных сторон при подозрении на компрометацию. Отработайте сценарий на стенде, чтобы в бою не изобретать команды. Безопасность и надёжность делят один фундамент — предсказуемое поведение launchd в штатных и нештатных условиях.

Перечитывайте этот чеклист после крупных апгрейдов macOS: диалоги разрешений, правила hardened runtime и Gatekeeper меняются тихо, пока текст plist остаётся прежним. Считайте такой обзор частью релизного чеклиста, а не «опциональной гигиеной». Ежеквартальная ревизия укладывается в час и отсекает долгие разборы после тихих регрессий платформы.