2026 OpenClaw guardian на арендованном Mac Mini: health check, launchd и webhook при сбоях — воспроизводимые шаги
Команды и агенты OpenClaw на удалённом Mac Mini бесполезны без наблюдения: процесс падает после обновления macOS, health endpoint перестаёт отвечать, а вы узнаёте об этом постфактум. Ниже — воспроизводимая схема установки и запуска, идея guardian через launchd, минимальный health probe, контракт JSON для webhook и таблица типовых кодов выхода.
Базовую установку OpenClaw и doctor разбираем в гайде по установке и Skills; для круглосуточного режима с Ollama см. шаги 7×24 с cron и watchdog. Полный список материалов — в разделе блога.
Три узких места, если не настроить guardian и алерты
- Молчаливый отказ процесса. Дочерний воркер завершился по сигналу или нехватке файловых дескрипторов, а родительский шелл остался — внешне «всё работает», очередь не двигается.
- Сетевой изоляционный слой. На арендованном узле health проверяют с localhost, но внешний балансировщик или SSH-туннель даёт ложноположительный OK; нужен явный проб к тому порту, который реально слушает OpenClaw.
- Шум без контекста. Webhook без hostname, времени и exit code не позволяет отличить тестовый прогон от инцидента на продовом run_id.
Матрица: как держать OpenClaw в фоне на macOS
На физическом Mac вы сами отвечаете за питание и диск; арендованный Mac Mini переносит доступность железа на провайдера, а вам остаётся выбрать модель супервизора и политику рестартов без простоя SSH-сессии.
| Подход | Плюсы | Минусы | Когда выбирать |
|---|---|---|---|
| LaunchAgent + KeepAlive | Автоподъём после краша, логи в ~/Library/Logs | Нужен корректный plist и пользователь GUI при некоторых сценариях | Постоянный сервис на одном пользователе аренды |
| LaunchDaemon (root) | Ранний старт до логина | Жёстче политика прав на арендованных образах | Только если провайдер явно разрешает и даёт инструкцию |
| tmux или screen вручную | Быстрый старт при отладке | Пропадает при перезагрузке узла | Краткие эксперименты, не прод |
Пошаговая интеграция: установка, запуск, проба, алерт
- Установка и старт в интерактиве. Поставьте OpenClaw по документации проекта, затем
openclaw doctorи один ручной запуск целевой команды guardian или gateway, пока в логе нет ошибок портов и путей. - Оформите LaunchAgent. В plist укажите
ProgramArguments, рабочий каталог с конфигом,StandardOutPathиStandardErrorPath; при необходимости добавьтеKeepAliveс throttle интервалом, чтобы не зациклить при фатальной ошибке конфигурации. - Health check. Поставьте
launchctlвторой job с интервалом или используйте существующий cron:curl -fsS http://127.0.0.1:PORT/healthлибо вызов CLI статуса; ненулевой код — триггер webhook. - Скрипт алерта. Обёртка читает последние строки stdout из лога launchd, формирует JSON (см. следующий блок) и делает
curl -X POSTсContent-Type: application/json; секрет передавайте заголовком вродеX-Webhook-Secret, не в URL. - Регрессия. Остановите процесс вручную, дождитесь срабатывания пробы, убедитесь, что пришёл один алерт с правильным exit_code; затем проверьте автоподъём KeepAlive.
- Ретенция логов. Ротация по размеру или суткам, чтобы диск арендованного 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 | Соединение отклонено | Сервис не поднят или упал между пробами |
| 22 | HTTP 4xx/5xx при curl -f | Проверить маршрут health, авторизацию, тело ответа |
| 124 | Таймаут GNU timeout | Увеличить лимит или искать блокировку ввода-вывода на диске |
| 137 | SIGKILL 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.