2026 OpenClaw guardian на арендованном Mac Mini: health check, launchd и webhook при сбоях — воспроизводимые шаги

Время чтения: 9 мин

Команды и агенты OpenClaw на удалённом Mac Mini бесполезны без наблюдения: процесс падает после обновления macOS, health endpoint перестаёт отвечать, а вы узнаёте об этом постфактум. Ниже — воспроизводимая схема установки и запуска, идея guardian через launchd, минимальный health probe, контракт JSON для webhook и таблица типовых кодов выхода.

Базовую установку OpenClaw и doctor разбираем в гайде по установке и Skills; для круглосуточного режима с Ollama см. шаги 7×24 с cron и watchdog. Полный список материалов — в разделе блога.

Три узких места, если не настроить guardian и алерты

  1. Молчаливый отказ процесса. Дочерний воркер завершился по сигналу или нехватке файловых дескрипторов, а родительский шелл остался — внешне «всё работает», очередь не двигается.
  2. Сетевой изоляционный слой. На арендованном узле health проверяют с localhost, но внешний балансировщик или SSH-туннель даёт ложноположительный OK; нужен явный проб к тому порту, который реально слушает OpenClaw.
  3. Шум без контекста. Webhook без hostname, времени и exit code не позволяет отличить тестовый прогон от инцидента на продовом run_id.

Матрица: как держать OpenClaw в фоне на macOS

На физическом Mac вы сами отвечаете за питание и диск; арендованный Mac Mini переносит доступность железа на провайдера, а вам остаётся выбрать модель супервизора и политику рестартов без простоя SSH-сессии.

Подход Плюсы Минусы Когда выбирать
LaunchAgent + KeepAliveАвтоподъём после краша, логи в ~/Library/LogsНужен корректный plist и пользователь GUI при некоторых сценарияхПостоянный сервис на одном пользователе аренды
LaunchDaemon (root)Ранний старт до логинаЖёстче политика прав на арендованных образахТолько если провайдер явно разрешает и даёт инструкцию
tmux или screen вручнуюБыстрый старт при отладкеПропадает при перезагрузке узлаКраткие эксперименты, не прод

Пошаговая интеграция: установка, запуск, проба, алерт

  1. Установка и старт в интерактиве. Поставьте OpenClaw по документации проекта, затем openclaw doctor и один ручной запуск целевой команды guardian или gateway, пока в логе нет ошибок портов и путей.
  2. Оформите LaunchAgent. В plist укажите ProgramArguments, рабочий каталог с конфигом, StandardOutPath и StandardErrorPath; при необходимости добавьте KeepAlive с throttle интервалом, чтобы не зациклить при фатальной ошибке конфигурации.
  3. Health check. Поставьте launchctl второй job с интервалом или используйте существующий cron: curl -fsS http://127.0.0.1:PORT/health либо вызов CLI статуса; ненулевой код — триггер webhook.
  4. Скрипт алерта. Обёртка читает последние строки stdout из лога launchd, формирует JSON (см. следующий блок) и делает curl -X POST с Content-Type: application/json; секрет передавайте заголовком вроде X-Webhook-Secret, не в URL.
  5. Регрессия. Остановите процесс вручную, дождитесь срабатывания пробы, убедитесь, что пришёл один алерт с правильным exit_code; затем проверьте автоподъём KeepAlive.
  6. Ретенция логов. Ротация по размеру или суткам, чтобы диск арендованного Mac не заполнялся трассами health-скрипта.

Пример полей JSON для webhook при аномалии

Единый контракт упрощает парсинг в PagerDuty, Slack incoming webhook или собственном приёмнике. Ниже минимально достаточный набор.

{
  "event": "openclaw.health_failed",
  "severity": "critical",
  "ts_utc": "2026-03-24T12:34:56Z",
  "host": "runmini-tenant-mac-01",
  "service": "openclaw-guardian",
  "run_id": "7f3a9c2e",
  "exit_code": 7,
  "http_status": null,
  "probe": "curl_http_127.0.0.1",
  "message": "health endpoint timeout 3s",
  "stdout_tail": "last 2kb of stderr/stdout",
  "labels": { "env": "prod", "region": "eu" }
}
  • severity — уровень эскалации для маршрутизации.
  • exit_code и probe — машиночитаемая причина без догадок по тексту.
  • stdout_tail — укороченный хвост лога; полный лог оставляйте на диске узла.

Безопасность приёмника: храните URL webhook и секрет в Keychain или переменных среды plist, не в репозитории; на стороне сервера проверяйте подпись и ограничивайте частоту запросов по IP арендованного узла; при утечке токена сразу ротируйте секрет и обновите LaunchAgent.

Типовые коды выхода и что проверить первым

Код Интерпретация Действия
0Успех пробы или штатное завершениеАлерт не отправлять; зафиксировать метрику uptime
1Общая ошибка скрипта или конфигурацииПеречитать plist, переменные среды, путь к бинарнику node или openclaw
2Неверные аргументы CLIСверить ProgramArguments с рабочим интерактивным запуском
6Нет ответа по сети у curlПорт слушает ли процесс, не сменился ли bind на unix-socket
7Соединение отклоненоСервис не поднят или упал между пробами
22HTTP 4xx/5xx при curl -fПроверить маршрут health, авторизацию, тело ответа
124Таймаут GNU timeoutУвеличить лимит или искать блокировку ввода-вывода на диске
137SIGKILL OOM или ручной kill -9Память модели или утечка; снизить параллелизм, лимиты cgroups если доступны

Цифры и параметры для копирования в runbook

  • Интервал пробы: каждые 30–60 секунд для HTTP health на localhost; для тяжёлых проверок — не чаще одного раза в 2–5 минут.
  • Таймаут curl: 2–5 секунд на попытку, не более трёх последовательных провалов до алерта, чтобы отсечь кратковременные лаги.
  • Хвост лога в webhook: 1–4 КиБ текста в поле stdout_tail; полные файлы хранить на узле с ротацией.
  • Throttle KeepAlive: пауза 10–30 секунд между автоматическими рестартами, чтобы не забить CPU при битом конфиге.

Mac Mini под OpenClaw и мониторинг

Оформите узел без обязательного входа в аккаунт на этапе выбора тарифа: откройте страницу аренды (гостевой поток), сравните цены, загляните в блог и центр помощи по SSH и доступу.

Резюме: связка LaunchAgent, периодического health probe и JSON webhook даёт предсказуемое поведение OpenClaw guardian на арендованном Mac Mini без сюрпризов после перезагрузки узла. Забронировать конфигурацию можно на странице аренды без логина; актуальные пакеты — в тарифах; дополнительные сценарии OpenClaw — в блоге RunMini.

Аренда без входа