Блокування Gateway
Чому
- Забезпечує запуск лише одного екземпляра gateway на один базовий порт на тому самому хості; додаткові gateway мають використовувати ізольовані профілі та унікальні порти.
- Переживає збої/SIGKILL, не залишаючи застарілих lock-файлів.
- Швидко завершується з чіткою помилкою, якщо контрольний порт уже зайнято.
Механізм
- Gateway прив’язує прослуховувач WebSocket (типово
ws://127.0.0.1:18789) одразу під час запуску, використовуючи ексклюзивний TCP-прослуховувач. - Якщо bind завершується помилкою
EADDRINUSE, запуск генеруєGatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>"). - ОС автоматично звільняє прослуховувач під час будь-якого завершення процесу, включно зі збоями та SIGKILL — окремий lock-файл або крок очищення не потрібен.
- Під час завершення роботи gateway закриває сервер WebSocket і базовий HTTP-сервер, щоб швидко звільнити порт.
Поверхня помилок
- Якщо порт утримує інший процес, під час запуску генерується
GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>"). - Інші помилки bind відображаються як
GatewayLockError("failed to bind gateway socket on ws://127.0.0.1:<port>: …").
Операційні примітки
- Якщо порт зайнятий іншим процесом, помилка буде такою самою; звільніть порт або виберіть інший за допомогою
openclaw gateway --port <port>. - Застосунок macOS, як і раніше, підтримує власний легкий PID-захист перед запуском gateway; runtime-блокування забезпечується через bind WebSocket.
Пов’язане
- Кілька Gateway — запуск кількох екземплярів з унікальними портами
- Усунення несправностей — діагностика
EADDRINUSEі конфліктів портів