Для AI-агентов: markdown этой страницы — /docs-content/infra/galaxy-sleep.md индекс документации — /llms.txt

Сон и пробуждение Galaxy-приложения

Galaxy-приложение засыпает по простою вместе с галактикой-носителем, и на время сна его контейнер остановлен. Эта страница описывает, что именно останавливается, какие поля показывают настоящее состояние, чем приложение поднять и сколько это занимает.

Что останавливается · Поля состояния · Чем поднять · Логи · Окно по расписанию

Что останавливается во сне

Приложение живёт в контейнере на общем хосте — галактике. Спать могут обе части, и это разные состояния.

Что спит Как это выглядит Что нужно, чтобы поднять
Контейнер приложения, галактика работает Приложение не отвечает, соседние приложения той же галактики работают Запуск контейнера — секунды
Галактика вместе со всеми контейнерами Не отвечает ни одно приложение этой галактики Загрузка машины галактики, затем запуск контейнера — минуты

Постоянный том /data сон переживает. Пробуждение запускает тот же контейнер, а не создаёт новый, поэтому строки, которые приложение записало в свой поток вывода до сна, доступны и после пробуждения. Полностью новый контейнер появляется только при повторной загрузке кода — вот она журнал предыдущего контейнера не сохраняет.

Поля status и reachability отвечают на разные вопросы

Поле status в ответе GET /v1/infra/servers/:id — это состояние учётной записи приложения на платформе. Пробуждение переводит запись в running в конце, когда контейнер уже запущен, поэтому во время подъёма галактики запись остаётся в sleeping — на холодной машине это занимает минуты. Обратное расхождение тоже возможно: запись может числиться в running, пока контейнер уже не работает.

Поэтому рядом идёт блок reachability — он отвечает на вопрос «может ли приложение ответить прямо сейчас». Блок приходит только у приложения, kind равен GALAXY_APP, у остальных типов серверов там null.

JSON
{
  "success": true,
  "data": {
    "id": "e22bb297-8a0a-4597-9b42-47d059cd1090",
    "kind": "GALAXY_APP",
    "status": "sleeping",
    "reachability": {
      "effectiveStatus": "running",
      "hostStatus": "running",
      "hostTunnel": "CONNECTED",
      "container": "running",
      "forwarder": "active",
      "probe": "ok",
      "probedAt": "2026-08-12T13:24:58.117Z"
    }
  }
}

Показаны поля, относящиеся к сну. Полный ответ — GET /v1/infra/servers/:id.

Поле Описание
effectiveStatus Сводный ответ о доступности — running, sleeping, waking, unreachable или unknown. Как он выводится, показано в таблице ниже
hostStatus Состояние галактики-носителя в том же наборе значений, что и status сервера
hostTunnel Соединение галактики с платформой — CONNECTED, DISCONNECTED или NONE
container Контейнер приложения — running, stopped или unknown. Значение unknown означает, что платформа не смогла посмотреть, а не что контейнер остановлен
forwarder Маршрутизация к контейнеру на хосте — active, inactive или unknown. Во сне останавливается вместе с контейнером
probe Чем закончился живой опрос хоста — ok, host-down (галактика спит или недоступна, опрос не отправлялся), host-busy (хост занят другой операцией), failed или not-attempted
probedAt Время опроса по стандарту ISO 8601. Значение null означает, что опроса не было

Как складывается effectiveStatus:

Состояние effectiveStatus
Галактика загружается waking
Галактика спит sleeping
Галактика работает, контейнер остановлен sleeping
Галактика работает, контейнер работает, маршрутизация активна running
Галактика работает, контейнер работает, маршрутизация остановлена unreachable
Галактика в ошибке либо потеряла соединение с платформой unreachable
Посмотреть не удалось unknown

Важно: живой опрос хоста платформа делает только когда галактика работает и соединена с платформой. Спящую галактику чтение состояния не будит, поэтому у спящей галактики container и forwarder всегда unknown, а probe равен host-down. Результат опроса платформа держит несколько секунд и отдаёт из памяти: опрос занимает канал команд, общий для всех приложений галактики, поэтому частый опрос состояния его не занимает.

Чем поднять спящее приложение

Способ Что делает
POST /v1/infra/servers/:id/wake Поднимает приложение через хост. При необходимости запускает галактику, затем стартует контейнер
POST /v1/infra/servers/:id/start То же самое. Отдельного смысла у двух вызовов для приложения нет
Загрузка кода Поднимает галактику сама и оставляет приложение работающим
Обращение к адресу приложения Запрос через шлюз поднимает приложение и до готовности отвечает кодом BH_SERVER_WAKING с заголовком Retry-After — подробности в Авторизации в приложении на Black Hole
Доставка события портала Платформа поднимает приложение перед доставкой

Ответ на вызов пробуждения приходит сразу, а не по готовности: у приложения нет своей облачной машины, и параметр ?wait=true ожидания здесь не даёт. Готовность проверяйте опросом GET /v1/infra/servers/:id по полю reachability.effectiveStatus — значение waking означает, что галактика ещё загружается.

Сколько ждать: подъём холодной галактики платформа ждёт до 15 минут и столько же готова ждать от вызывающего. Точное значение бюджета приходит в ответе на чтение логов спящего приложения, поле recovery.coldBootBudgetSeconds. Приложение на уже работающей галактике стартует за секунды.

Запрет пробуждения на хосте блокирует оба вызова, и /start его не снимает. Коды отказов — в таблице жизненного цикла на странице Galaxy-приложение.

Логи спящего приложения

Чтение GET /v1/infra/servers/:id/logs не будит ни приложение, ни галактику. Пока галактика спит или недоступна, ответ приходит со статусом 200, пустым массивом data.logs и двумя диагностическими полями.

JSON
{
  "success": true,
  "data": {
    "logs": [],
    "lines": [],
    "hint": "Galaxy host is asleep or unreachable, so the container log cannot be read right now. …",
    "recovery": {
      "reason": "The galaxy host carrying this container is not RUNNING + CONNECTED. …",
      "recoveryAction": "POST /v1/infra/servers/e22bb297-8a0a-4597-9b42-47d059cd1090/wake",
      "logsPreserved": true,
      "coldBootBudgetSeconds": 900,
      "poll": "GET /v1/infra/servers/e22bb297-8a0a-4597-9b42-47d059cd1090 (read `reachability`)",
      "wakeSchedule": { "available": false, "code": "ALWAYS_ON_CONFLICT" }
    }
  }
}
Поле Описание
hint Та же подсказка обычным текстом, одной строкой
recovery.reason Почему журнал сейчас не читается
recovery.recoveryAction Вызов, которым поднять приложение
recovery.logsPreserved Значение true означает, что строки, записанные до сна, доступны после пробуждения
recovery.coldBootBudgetSeconds Бюджет подъёма холодной галактики в секундах
recovery.poll Чем проверять готовность вместо повторного чтения логов
recovery.wakeSchedule Доступно ли этому приложению окно пробуждения по расписанию. Поле available — ответ, поле code при отказе несёт тот же код, которым ответит создание окна

Порядок действий: поднять приложение вызовом из recovery.recoveryAction, дождаться reachability.effectiveStatus равного running, повторить чтение логов. Повторять чтение логов в цикле, пока приложение спит, смысла нет — ответ не изменится.

Окно пробуждения по расписанию

Окно пробуждения поднимает приложение по расписанию, без вызова руками. Доступно оно не каждому приложению, и проверять это следует по ответу платформы, а не по общему правилу: поле recovery.wakeSchedule в ответе на чтение логов спящего приложения даёт готовый ответ для конкретного приложения, а при отказе — его код.

Один отказ стоит знать заранее. Приложение, которое не засыпает по простою само, платформа считает работающим постоянно, и окно ему отклоняется кодом ALWAYS_ON_CONFLICT. Так создаются агенты и боты в галактике: их поднимает не входящий запрос, а собственный опрос портала, поэтому таймер простоя им не назначается. Такое приложение поднимают вызовом пробуждения.

Список окон, создание, изменение и удаление — Пробуждение по расписанию.

Смотрите также