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