OpenClaw на Linux VPS
с пользовательским systemd

linger · XDG_RUNTIME_DIR · проверка демона · слойная диагностика · регион API и egress

OpenClaw Linux VPS systemd linger API

Платформенные инженеры, SRE и операторы self-hosted агентов в 2026 на Linux VPS чаще терпят неудачу не из-за опечатки, а из-за того, что после выхода из SSH останавливается user-level systemd, XDG_RUNTIME_DIR отсутствует вне интерактивных путей, логи gateway-канал-модель читаются одной кашей, а регион API в консоли не совпадает с реальным egress VPS. Здесь пять скрытых предпродакшен-налогов, трёхсторонняя таблица bare-metal systemd против systemd-in-container против Docker-only, шестишаговый воспроизводимый runbook с командами, чеклист и три цитируемых технических факта, плюс матрица решений. Установка и gateway: чеклист установки и doctor. Compose: продакшен-база Docker Compose. Заказ: страница заказа.

01

«Запускается вручную» не равно «держится без присмотра»

OpenClaw на Linux переносит долгоживущие процессы, каталоги сокетов, логи и семантику рестартов из личной привычки в аудируемые юниты. Пять пунктов ниже приходят вместе и сводятся к одному воротам: запишите linger и XDG_RUNTIME_DIR в лист приёмки раньше споров про Docker.

  1. 01

    Привязка к сессии: без linger завершение интерактивного SSH может остановить user systemd manager; юниты тихо умирают ночью.

  2. 02

    Нет runtime-каталога: cron, минимальные шеллы или неверный тип сервиса оставляют XDG_RUNTIME_DIR пустым, ошибки делятся между приложением и systemd.

  3. 03

    Пропуск слоёв: слушание gateway, токены канала, маршрутизация модели и 429 upstream сливаются в «OpenClaw сломан».

  4. 04

    Дрейф региона и egress: консоль указывает регион A, путь VPS возвращает подсказки региона B в заголовках, похоже на рваную аутентификацию, а не стабильный 403.

  5. 05

    Смешанные границы: Docker плюс user-юниты на одном хосте расходятся в порядке рестартов и health, откаты неясны.

Сравнивая host user units и PID 1 в контейнере, используйте следующую таблицу как слайд ревью, а не лозунг.

02

Три модели постоянства: bare-metal systemd, systemd-in-container, только Docker

Сначала решите, кто владеет рестартами, ротацией логов, семантикой linger и границей сокетов против портов хоста. Универсального победителя нет.

МодельТипично подходитГлавный выигрышГлавная цена
Bare-metal systemd (user)Один VPS, тесная работа с host firewall и loopbackСогласовано с дистрибутивом, юниты и journal в линиюОбязательны linger и границы login-сессий
systemd-in-containerМультипроцессный надзор внутри образаПохоже на классический Linux service hostОстрее грани привилегий и образа, отладка с двух сторон
Только DockerCompose или оркестратор уже держит health и restartВерсионируемые артефакты и откаты очевидныСемантика user linger на хосте не переносится автоматически

Воспроизводимая приёмка — не «на ноутбуке завелось», а «юнит переживает выход из SSH, причины в journal читаемы, подсказки региона ловятся дважды одними командами».

03

Шестишаговый runbook: linger, runtime dir, установка, проверка, слойные сигналы

Порядок: оставить user manager живым без присмотра, проверить runtime dir, поставить юниты, триаж по слоям, затем снимки egress. Каждый шаг сохраняет вывод команд. Базовая линия gateway — в чеклисте установки и doctor.

  1. 01

    Зафиксировать сервисного пользователя: аккаунт и основная группа, не смешивать с root. Артефакт: id и короткий фрагмент loginctl user-status.

  2. 02

    Включить linger: для deploy-пользователя, чтобы user@ работал без логина. Артефакт: show-user печатает linger=yes.

  3. 03

    Проверить XDG_RUNTIME_DIR: вывести из того же профиля, что и unit, ожидать форму /run/user/<uid>.

  4. 04

    Установить и включить: положить unit в user scope, daemon-reload и enable --now, status для Active и главного pid.

  5. 05

    Сэмплировать по слоям: сначала listen и parse конфига gateway, затем токены канала и webhook, затем квоты модели upstream и региональные заголовки. По двести последних строк journal на слой.

  6. 06

    Согласованность egress: резолвить тот же hostname и сохранять TLS-видимые метаданные до и после изменений; один RTT не делать выводом о производительности.

linger, runtime dir, user units (пример)
loginctl show-user "${USER}" -p Linger
sudo loginctl enable-linger "${USER}"
systemctl --user show-environment | grep XDG_RUNTIME_DIR || true
echo "${XDG_RUNTIME_DIR}"
systemctl --user daemon-reload
systemctl --user status openclaw-gateway.service --no-pager
journalctl --user -u openclaw-gateway.service -n 200 --no-pager

Заметка: замените openclaw-gateway.service на реальное имя юнита. Другой бинарник gateway всё равно сверяйте с ExecStart в unit.

04

Чеклист перед продом и три цитируемых технических факта

Назначьте владельца и ритм ревью. Проверки региона собирают только повторяемые TLS и метаданные ответа, без выдуманных рейтингов пропускной способности.

  1. S1

    Ворота linger: тикеты должны содержать show-user Linger=yes текстом или скриншотом.

  2. S2

    Граница юнитов: какие порты держат user units против публикуемых контейнером, синхронизировать с firewall-докой.

  3. S3

    Удержание логов: персист journal или пересылка описаны, чтобы отладочные логи не забили диск и не имитировали зависание.

  4. S4

    Слойный runbook: минимум три проверки «перейти дальше» на слой gateway, channel, model.

  5. S5

    Снимки региона: вывод резолвера и заголовки до и после релизного окна для сравнения отката.

  • Семантика linger: loginctl enable-linger влияет на границу жизни user systemd manager; это не автоматически равно выбору Docker.
  • XDG_RUNTIME_DIR: в user-сессии systemd обычно /run/user/<uid>. Вне login отсутствие ведёт сокеты в ненадёжные пути.
  • Заголовки-подсказки региона: многие upstream возвращают подсказки в заголовках или теле ошибки. Фиксируйте версию инструмента и флаги, чтобы кэш-прокси не считался origin.

Внимание: один удачный curl после смены CDN не доказательство. Фиксированный hostname и повторяемые команды важнее удачного тайминга.

05

Матрица решений и стабильный облачный egress: когда уходить от голого bash

Без версионированных linger, имён юнитов, матрицы портов и снимков региона Linux-постоянство сделано наполовину. Вторая половина — общий язык ответственности с triage gateway.

Состояние командыРекомендуемый дефолтСигнал приёмкиЧастая ловушка
Соло, быстрые итерацииБаза Docker ComposeHealth и restart ревьюятся в composeИгнор mem_limit и ротации логов даёт ложные зависания
Мультитенант на одной машинеГраница контейнера плюс изолированные имена проектовУ каждого стека свой каталог данныхСмешение с user-юнитами даёт гонки рестартов
Плотная связка с хостомUser systemd плюс lingerjournal непрерывен после SSHXDG_RUNTIME_DIR не проверен на неинтерактивных путях

Интерактивный bash, nohup без linger или ручные watchdog обычно оплачиваются на ревью изменений и аудите. Без снимков egress сложно объяснять сдвиги политики региона upstream. Выделенная облачная Mac-ёмкость с выбираемым регионом и читаемыми сетевыми ступенями упрощает стабильный egress и golden images рядом с iOS-сборками или десктоп-хендовером.

Частая ловушка: думать, что Docker убирает всю семантику systemd. Если user-юниты держат gateway вне Compose, linger и runtime dir остаются жёсткими воротами.

Персональные скрипты и неверсионированные экспорты редко переживают передачу дел и комплаенс с внешним SLA. Когда OpenClaw поставляется вместе с политикой региона upstream, TLS-отпечатком и фиксированной историей egress, bash-only пути часто теряют аудируемые тикеты изменений. Для команд, которые объединяют iOS-хендовер, CI-регрессию и автоматизированных агентов в одной приёмке и хотят заказы и региональные ступени вместо самодельной лотереи egress, облачная аренда Mac Mini VpsMesh обычно лучше подходит: выделенные узлы упрощают ACL и hostname, коллаборация остаётся близко к плотным циклам, язык эксплуатации может совпадать с runbook приватной сети для билд-нод. Смесь регионов на странице цен, границы подключения — по центру помощи.

FAQ

Три частых вопроса

После сессии systemd --user может остановиться и унести user-юниты OpenClaw. Проверьте linger до продакшена и сверьте подключение и постоянство с центром помощи, чтобы ночные остановки не приняли за апстрим-аварию.

Зафиксируйте hostname и версию инструментов, сохраните резолвинг и TLS-видимые метаданные для того же endpoint, сравните настройку региона в консоли с переменными окружения. Health на уровне Compose: статья продакшен-база Docker Compose.

Когда рестарт, ротация, лимиты и healthcheck полностью в Compose или оркестраторе и не нужны host user sockets плюс linger, Docker-only часто проще. Завершите слойную приёмку из третьего раздела перед смешением с user-юнитами.