OpenClaw 2026 на Linux systemd и в WSL2: терминал и автоматизация

Всё чаще шлюзы в духе OpenClaw крутят на ноутбуках с Linux, крошечных VPS или внутри Windows WSL2, а macOS остаётся обязательной ступенью для подписи, нотаризации и тяжёлых матриц симуляторов. Ниже — воспроизводимые полевые заметки на 2026 год: как заставить пользовательский unit systemd честно видеть окружение и рабочий каталог, что ломается первым в WSL2, почему вызовы инструментов MCP начинают упираться в таймауты при переходе от классического stdio к Streamable HTTP, и какой короткий чеклист по ENOENT экономит полдня разбора логов. Чтобы macOS-ветка пайплайна не расходилась с Linux-контуром по путям и демонам, держите под рукой материал 2026 OpenClaw: практическое удалённое развёртывание на Mac — пути установки, Docker и постоянный запуск на хосте, частые ошибки и сценарии рабочих процессов.

1. Linux: unit-файлы systemd --user, которые переживают выход из сессии

Для постоянного шлюза разумнее systemd --user, чем случайный nohup: есть рестарты, журнал и лимиты ресурсов. Положите unit в ~/.config/systemd/user/, затем systemctl --user daemon-reload и systemctl --user enable --now openclaw-gateway.service. Классическая ловушка — отсутствие linger: без loginctl enable-linger "$USER" пользовательские службы гасятся, когда закрывается последняя сессия, и ночью всё «мистически» падает. В самом unit задайте WorkingDirectory= на корень репозитория с конфигом, минимальный Environment=PATH=... с абсолютными путями к Node или бинарям и не рассчитывайте на интерактивные профили: ни systemd, ни launchd не читают ваш .bashrc. HTTP-слушатель лучше привязать к 127.0.0.1, пока перед ним нет обратного прокси, чтобы группы безопасности оставались предсказуемыми.

Дымовой тест: после перезагрузки проверьте systemctl --user is-active и journalctl --user -u openclaw-gateway -n 50, прежде чем закрывать задачу как «готово».

2. WSL2: где Windows-пути, часы и сокеты расходятся с ожиданиями

WSL2 даёт настоящее ядро Linux, но interop добавляет сюрпризов. Процессы из /mnt/c/... наследуют другую семантику inode и переводы строк; долгоживущие демоны держите под корнем Linux-ФС, например в ~/projects. Расхождение часов между Windows и ВМ всё ещё ломает подписанные URL и проверки токенов — после длительного сна попробуйте wsl --shutdown, если видите «необъяснимые» 401. Если MCP слушает HTTP внутри дистрибутива, зафиксируйте в документации, бьют ли клиенты по 127.0.0.1 на стороне Windows с пробросом порта или по IP дистрибутива из ip addr: localhost снаружи и внутри не всегда одно и то же. Антивирус, сканирующий виртуальный диск Linux, может раздувать задержку первого запуска инструмента — исключайте VHD только если политика безопасности позволяет.

3. Таймауты MCP и миграция к Streamable HTTP

Транспорт stdio кажется простым, пока один медленный обход файловой системы не блокирует весь канал. Когда клиент сообщает о таймауте инструмента, а в логе сервера работа ещё идёт, разведите таймаут подключения и потолок на один вызов: завышение «не той» настройки маскирует перегрузку. Переход на Streamable HTTP или похожий потоковый ответ помогает при крупных или поштучно отдаваемых ответах, но прокси не должны агрессивно буферизовать тело. Задайте явный idle read timeout на reverse proxy выше худшего реального инструмента, но ниже «молчаливого» детектора зависания на клиенте, чтобы ошибки приходили структурированно. Логируйте MCP-запросы с correlation ID через шлюз, маршрутизатор моделей и подпроцесс инструмента — так видно, сидит ли задержка в TLS, сериализации JSON или в самом бинаре.

4. ENOENT: пять шагов до тяжёлого grep по репозиторию

ENOENT почти всегда означает, что процесс, который его выбросил, не видит тот путь, который вы воображаете. По порядку: путь к бинарю в unit или сессии WSL (command -v), настроенный рабочий каталог, не смонтирован ли файл на сетевом томе, который ещё не поднят к старту службы, и нет ли относительных путей в конфиге, существующих только на вашем ноутбуке. В Node-проектах сверяйте process.execPath с расположением скрипта — в монорепозиториях бинарь часто на уровень глубже, чем в примере конфига. После смены транспорта перепроверьте корень статики HTTP или путь к Unix-сокету в новом блоке против старой stdio-обёртки.

5. Эластичный удалённый Mac под тяжёлые задачи

Оставьте на Linux или WSL2 лёгкий контур: аутентификация, маршрутизация, вебхуки и дешёвые инструменты. Очередь задач, которым нужен только macOS — большие прогоны xcodebuild, нотаризация, широкие сетки симуляторов — снимайте на выделенный пул удалённых Mac с ключами SSH, ограниченными по окружению. Небольшой диспетчер может rsync-нуть tarball рабочей копии, запустить закреплённую lane Fastlane или xcodebuild и стримить лог обратно по SSH, чтобы операторы читали один общий след. Ограничивайте параллелизм симуляторов по ОЗУ так же, как в «железном» CI; разбор компромиссов по памяти, воркерам и диску — в корпоративном FAQ по параллельному тестированию в Xcode и Test Plan на Mac CI в 2026 году. Когда пик спроса прошёл, выключайте простаивающие Mac-ноды, оставляя Linux-плоскость управления включённой.

Почему для macOS-половины по-прежнему удобен класс Mac mini

Удалённый вынос тяжёлых шагов работает только если macOS-плечо предсказуемо. Mac mini на Apple Silicon сочетает сильную однопоточную производительность с очень скромным потреблением в простое, поэтому постоянно включённые раннеры не превращаются в счёт за электричество полупустой башни. Рядом с нативным Unix-стеком вы получаете цепочки подписи с участием Keychain без двойной виртуализации, когда macOS спрятан под другой настольной ОС. macOS связывает Gatekeeper, SIP и FileVault в связный базовый уровень для автоматизации, глядящей в интернет, что снижает объём «самодельного» ужесточения по сравнению с чисто Linux-контуром. Если вы в 2026 году проектируете связку OpenClaw с удалённым Mac, Mac mini M4 — разумная стартовая точка для macOS-ноги; когда понадобится дополнительная выделенная ёмкость в региональных POP, откройте главную страницу Macstripe, сравните модели и подключите эластичный сценарий без закупки стоечного железа заранее.