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і конфліктів портів