2026 OpenClaw демон и автозапуск: launchd на удалённом Mac с VNC
25 марта 2026 г. · около 12 мин
Чтобы процесс переживал обрывы SSH и перезагрузки, на macOS используют launchd и пользовательский LaunchAgent: аргументы, stdout/stderr в файлы, при необходимости политика перезапуска. На удалённом Mac сначала пройдите графические запросы через VNC, затем launchctl bootstrap gui/$(id -u). Путь к бинарнику — which openclaw. Секреты не храните в открытом plist.
На арендованных узлах добавляются соседи по железу, окна обслуживания и смена IP. Храните plist в Git без секретов и ведите короткий runbook: ночью «пропал порт» чаще всего означает ожидание разрешения в GUI, а не «сломался интернет».
Без демона что ломается
- SSH сессия закрылась — процесс умер, tmux не даёт политику автоперезапуска сам по себе.
- Сон и энергосбережение убивают слушатель без явной строки в логе.
- Цепочка ключей и приватность ждут клика, которого нет в чистом SSH.
- Без отдельного stderr файл трудно разбирать инциденты.
- Двойной запуск — конфликт портов и флаппинг.
Сравнение
| Способ | Когда | Автозапуск | После падения | Аудит |
|---|---|---|---|---|
| Терминал | Отладка | Нет | Нет | Низкий |
| tmux | Средний срок | Скрипты | Вручную | Средний |
| cron | Периодика | По расписанию | Не для постоянного шлюза | Средний |
| LaunchAgent | После логина | Да | Опционально KeepAlive | Высокий |
Шесть шагов
~/Library/LaunchAgents/com.example.openclaw.plist.plutil -lint и bootstrap.<?xml version="1.0" encoding="UTF-8"?> <plist version="1.0"><dict> <key>Label</key><string>com.example.openclaw</string> <key>ProgramArguments</key><array> <string>/opt/homebrew/bin/openclaw</string><string>gateway</string> </array> <key>RunAtLoad</key><true/> <key>StandardOutPath</key><string>/tmp/openclaw.out.log</string> <key>StandardErrorPath</key><string>/tmp/openclaw.err.log</string> </dict></plist>
WorkingDirectory, переменные среды, секреты не в plist
Укажите WorkingDirectory, если OpenClaw использует относительные пути. В EnvironmentVariables добавляйте только безопасные вещи вроде расширенного PATH. Ключи API — в связку ключей или файлы с жёсткими правами. На shared-хостах проверяйте chmod plist и целостность ProgramArguments.
KeepAlive и шторм перезапусков
Неверная конфигурация + KeepAlive = бесконечные рестарты и забитые логи. Сначала стабильный запуск без KeepAlive, чтение stderr, затем троттлинг по документации Apple. Ограничивайте рост логов.
VNC-разбор, когда launchctl «в порядке»
Специальные возможности, полный диск, скрытый системный диалог — типичные причины «процесс есть, сервиса нет». Графическая сессия быстрее SSH на арендованной машине.
Плейбук отката
- Сохранить plist и последние ~200 строк stderr.
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.example.openclaw.plist(домен поправить).- Ручной запуск в VNC до стабильности, сравнить argv.
- Повторный bootstrap после
plutil -lintи ревью.
Чеклист в день обновления
Пути к бинарю и каталоги по умолчанию могут смениться. Схема: один интерактивный запуск в VNC, закрыть мастера, записать рабочие argv, обновить plist, перезагрузить job, сравнить интенсивность stderr до/после минуту к минуте. На аренде с несколькими администраторами назначьте владельца plist, иначе получите взаимные перезаписи.
Минимальный мониторинг без дорогого APM
Часто достаточно кода возврата launchctl print, времени модификации stderr и HTTP-проверки консоли. Следите за свободным местом: KeepAlive с крутящимися логами может заполнить том за ночь.
Конфликты портов и двойной запуск
Дважды загруженный тот же Label или ручной процесс рядом с launchd на том же порту дают прерывистые ошибки bind, не объясняя, кто «победил». Договоритесь о правиле: в продакшене только launchd или для отладки сначала bootout, затем интерактивный запуск. Таблица «порт → ожидаемый процесс» в общей wiki экономит часы при передаче смены и снижает риск взаимно противоречивых «починок» ночью.
Минимальная гигиена безопасности шлюза
Слушать 0.0.0.0 или открывать сервис только через SSH-туннель — вопрос модели угроз. Арендованный Mac не оправдывает слабый VNC-пароль или переиспользование секретов. Держите токены вне plist с широкими правами и закрепите эти два предложения в начале runbook — иначе следующий дежурный повторит ту же ошибку в три часа ночи.
Материалы
10 решений по ошибкам, миграция 2026.3.x, VNC-гайд.
Итог
VNCMac — удалённый Mac с VNC плюс launchd: меньше «чёрного ящика» при правах доступа и понятнее эксплуатация.