Блокировка Gateway
Последнее обновление: 2025-12-11Зачем
- Обеспечить запуск только одного экземпляра шлюза на базовый порт на том же хосте; дополнительные шлюзы должны использовать изолированные профили и уникальные порты.
- Переживать аварийные завершения/SIGKILL без оставления устаревших файлов блокировки.
- Быстро завершаться с понятной ошибкой, когда управляющий порт уже занят.
Механизм
- Шлюз привязывает слушатель WebSocket (по умолчанию
ws://127.0.0.1:18789) сразу при запуске, используя эксклюзивный TCP‑слушатель. - Если привязка не удаётся с
EADDRINUSE, запуск выбрасываетGatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>"). - ОС автоматически освобождает слушатель при любом завершении процесса, включая аварии и SIGKILL — отдельный файл блокировки или шаг очистки не требуется.
- При завершении работы шлюз закрывает сервер WebSocket и базовый HTTP‑сервер, чтобы оперативно освободить порт.
Поверхность ошибок
- Если порт удерживается другим процессом, запуск выбрасывает
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>. - Приложение для macOS по‑прежнему поддерживает собственную лёгкую защиту по PID перед запуском шлюза; блокировка времени выполнения обеспечивается привязкой WebSocket.