Gateway

Blokada Gateway

Dlaczego

  • Zapewnia, że na tym samym hoście dla jednego portu bazowego działa tylko jedna instancja Gateway; dodatkowe instancje Gateway muszą używać izolowanych profili i unikalnych portów.
  • Przetrwanie awarii/SIGKILL bez pozostawiania nieaktualnych plików blokad.
  • Szybkie niepowodzenie z jasnym błędem, gdy port sterujący jest już zajęty.

Mechanizm

  • Gateway najpierw uzyskuje plik blokady dla danej konfiguracji w katalogu blokad stanu i sprawdza skonfigurowany port pod kątem istniejącego procesu nasłuchującego.
  • Jeśli zarejestrowany właściciel blokady już nie istnieje, port jest wolny albo blokada jest nieaktualna, uruchamianie odzyskuje blokadę i kontynuuje.
  • Następnie Gateway wiąże proces nasłuchujący HTTP/WebSocket (domyślnie ws://127.0.0.1:18789) przy użyciu wyłącznego procesu nasłuchującego TCP.
  • Jeśli wiązanie nie powiedzie się z EADDRINUSE, uruchamianie zgłasza GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>").
  • Przy zamykaniu Gateway zamyka serwer HTTP/WebSocket i usuwa plik blokady.

Sygnalizacja błędów

  • Jeśli inny proces zajmuje port, uruchamianie zgłasza GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>").
  • Inne niepowodzenia wiązania są sygnalizowane jako GatewayLockError("failed to bind gateway socket on ws://127.0.0.1:<port>: …").

Uwagi operacyjne

  • Jeśli port jest zajęty przez inny proces, błąd jest taki sam; zwolnij port albo wybierz inny za pomocą openclaw gateway --port <port>.
  • Pod nadzorem menedżera usług nowy proces Gateway, który wykryje istniejący zdrowy responder /healthz, pozostawia temu procesowi kontrolę. W systemd duplikat procesu uruchamiającego kończy działanie z kodem 78, dzięki czemu domyślne RestartPreventExitStatus=78 zapobiega zapętleniu Restart=always przy konflikcie blokady lub EADDRINUSE. Jeśli istniejący proces nigdy nie stanie się zdrowy, ponowienia są ograniczone, a uruchamianie kończy się jasnym błędem blokady zamiast zapętlać się bez końca.
  • Aplikacja macOS nadal utrzymuje własną lekką ochronę PID przed uruchomieniem Gateway; blokada czasu wykonywania jest wymuszana przez plik blokady oraz wiązanie HTTP/WebSocket.

Powiązane