Skip to Content
Руководство для пользователейВосстановление Hosted Workspace оператором

Восстановление Hosted Workspace оператором

Используйте эту процедуру только для Linux durable local-process worker на исходном хосте, чей незавершенный захват Hosted Shell сохранил аренду Workspace. Перезагрузка между prepare и complete не снимает fence; оператор по-прежнему должен убедиться, что все потенциальные источники записи в Workspace остановлены и не могут быть перезапущены, а затем предоставить доказательства с помощью complete. Восстановление делает физический Workspace доступным для новых сессий. Оно не завершает, не повторяет и не сертифицирует исходный вызов Shell.

Команда обслуживания поставляется в виде qwen-managed-agent-server-*-operator-recovery.jar. В reference-дистрибутиве вызывайте её через bin/qwen-managed-agent-operator-recovery; для сборки из модуля используйте java -jar qwen-managed-agent-server-*-operator-recovery.jar. Запустите её на исходном хосте worker под служебной учетной записью ОС, используя настройки базы данных сервиса, полное кольцо ключей учетных данных Runtime и QWEN_MANAGED_AGENT_RUNTIME_STATE_DIRECTORY. Эта запись читает активную пару и previous-credential-keys из той же Spring-конфигурации, что и сервер. После ротации лаунчер загружает config/application.yml из корня дистрибутива; если файл находится в другом месте, установите SPRING_CONFIG_ADDITIONAL_LOCATION=file:<absolute-path>/application.yml. Сохраните новую активную пару и предыдущие ключи, необходимые целевому binding. Карта previous-key не может быть передана через переменные окружения QWEN_MANAGED_AGENT_*; следуйте правилам bracket-key в rotation runbook. Его сводка запуска и ошибки недоступных ключей содержат только экранированные идентификаторы ключей, но не секретные значения. Установите QWEN_MANAGED_AGENT_RUNTIME_DURABLE_LOCAL_PROCESS=true, QWEN_MANAGED_AGENT_RUNTIME_PROVISIONER=local-process и QWEN_MANAGED_AGENT_RUNTIME_OPERATOR_RECOVERY_ENABLED=true для этого процесса обслуживания. Не делайте базу данных и окружение учетных данных общедоступными. Примените миграцию базы данных сервиса перед запуском команды. Команда не запускает HTTP-слушатель, планировщик или worker.

  1. Найдите runtime.runtimeBindingId и runtime.generation затронутого запуска. Если запись запуска недоступна, авторизованный DBA может использовать запрос только для чтения к qwen_runtime_binding для затронутого tenant_id и workspace_id, чтобы получить список binding_id, runtime_generation и binding_state; проверьте каждого кандидата и используйте только тот, у которого есть соответствующая удерживаемая аренда и захват Shell. Из reference-бандла выполните bin/qwen-managed-agent-operator-recovery inspect <bindingId> <generation>; для сборки из модуля используйте эквивалентную команду java -jar, указанную выше. Запишите возвращенные holderKey, Runtime-сессию, вызов Shell, captureStatus и captureReason. Восстановление требует сохраненного результата Shell producer_lost и точной, всё ещё удерживаемой аренды Workspace. Устаревший неподдерживаемый worker, отсутствующая регистрационная идентичность или отсутствующий держатель не могут быть восстановлены путем создания записей-замен.

  2. Из reference-бандла выполните bin/qwen-managed-agent-operator-recovery prepare <bindingId> <generation> <holderKey> '<incident reason>'; для сборки из модуля используйте эквивалентную команду java -jar, указанную выше. Сохраните возвращенный recoveryId. Активный или заблокированный восстановлением binding помечается fence как OPERATOR_RECOVERY; уже потерянный binding остается LOST и исключается из фонового сканирования восстановления. Аренда Workspace не освобождается. Повторение с той же служебной учетной записью ОС и причиной безопасно. Другая записанная учетная запись, причина, generation или держатель отклоняются. Запишите человеческого оператора отдельно в записи инцидента; operator_id идентифицирует учетную запись ОС, запускающую команду.

  3. Остановите исходный worker и проверьте все возможные источники записи в Workspace, включая отсоединенные дочерние процессы и внешних супервизоров. Предотвратите перезапуск исходного worker и источников записи. Подтвердите, что они остановлены. Завершение группы процессов, EOF канала, истекшее время и потеря родительского PID сами по себе недостаточны. Если это невозможно установить, остановитесь и оставьте Workspace в состоянии fence.

  4. Создайте обычный (не symlink) UTF-8 JSON-файл размером не более 8 КиБ непосредственно в приватном каталоге состояния Runtime, с режимом 0600, строго со следующими полями (замените примерные значения):

    { "version": 1, "recoveryId": "<recoveryId>", "verifiedAt": "2026-09-29T03:00:00Z", "method": "host inspection", "actions": "Stopped worker and detached writers; disabled their external restart source; verified no writer remains", "restartPrevention": true }

    verifiedAt должен быть фактическим временем проверки в UTC, не ранее prepare и не более чем на пять минут впереди часов хоста обслуживания. Запишите конкретные шаги и источник предотвращения перезапуска; никогда не записывайте утверждение до завершения этих проверок. Держите файл и запись инцидента приватными.

  5. Из reference-бандла выполните bin/qwen-managed-agent-operator-recovery complete <recoveryId> <absoluteEvidenceFile>; для сборки из модуля используйте эквивалентную команду java -jar, указанную выше. Команда проверяет точную сохраненную идентичность worker и, в рамках той же загрузки, её отсутствие; после перезагрузки исходного хоста она проверяет измененную идентичность загрузки. Затем она помечает регистрацию как tombstone, сохраняет неизменяемое утверждение и возвращает только исходного держателя. Команду можно повторить с тем же файлом после сбоя или временной ошибки базы данных. Измененное утверждение отклоняется. Успешный вывод — completed.

После завершения запустите новую сессию и убедитесь, что она может использовать Workspace. Проверьте исходный ход отдельно: его частичный вывод и неопределенные эффекты остаются неопределенными, и ни один вызов Shell не воспроизводится. Не очищайте таблицы SQL или файлы регистрации вручную для обхода отказа. Если исходная регистрация отсутствует или повреждена, или worker из устаревшего эфемерного режима, эта процедура не поддерживается; эскалируйте с сохраненными доказательствами, а не фальсифицируйте их.

Программное обеспечение может проверить зарегистрированную идентичность worker и точный SQL-держатель, но не может доказать, что произвольные сбежавшие потомки остановлены. Утверждение оператора является границей доверия для этого факта.

Last updated on