Gateway
Блокировка Gateway
Зачем
- Гарантировать, что на одном хосте для одного базового порта запущен только один экземпляр Gateway; дополнительные Gateway должны использовать изолированные профили и уникальные порты.
- Переживать сбои/SIGKILL без оставления устаревших файлов блокировки.
- Быстро завершаться с понятной ошибкой, когда управляющий порт уже занят.
Механизм
- Gateway сначала получает файл блокировки для конкретной конфигурации в каталоге блокировок состояния и проверяет настроенный порт на наличие существующего прослушивателя.
- Если записанный владелец блокировки исчез, порт свободен или блокировка устарела, запуск повторно захватывает блокировку и продолжается.
- Затем Gateway привязывает прослушиватель HTTP/WebSocket (по умолчанию
ws://127.0.0.1:18789) с использованием эксклюзивного TCP-прослушивателя. - Если привязка завершается ошибкой
EADDRINUSE, запуск выбрасываетGatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>"). - При завершении работы Gateway закрывает сервер HTTP/WebSocket и удаляет файл блокировки.
Поверхность ошибок
- Если порт удерживает другой процесс, запуск выбрасывает
GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>"). - Другие ошибки привязки отображаются как
GatewayLockError("failed to bind gateway socket on ws://127.0.0.1:<port>: …").
Операционные заметки
- Если порт занят другим процессом, ошибка будет той же; освободите порт или выберите другой с помощью
openclaw gateway --port <port>. - Под управлением сервисного супервизора новый процесс Gateway, который видит существующий исправный ответчик
/healthz, оставляет управление за этим процессом. В systemd дублирующий запускатель завершается с кодом 78, поэтому значение по умолчаниюRestartPreventExitStatus=78не даетRestart=alwaysзациклиться при конфликте блокировки илиEADDRINUSE. Если существующий процесс так и не становится исправным, число повторных попыток ограничено, и запуск завершается с понятной ошибкой блокировки вместо бесконечного цикла. - Приложение macOS по-прежнему поддерживает собственную легковесную PID-защиту перед запуском Gateway; блокировка времени выполнения обеспечивается файлом блокировки и привязкой HTTP/WebSocket.
Связанные разделы
- Несколько Gateway — запуск нескольких экземпляров с уникальными портами
- Устранение неполадок — диагностика
EADDRINUSEи конфликтов портов
Was this useful?