Blokada Gateway
Dlaczego
- Zapewnia, że na tym samym hoście działa tylko jedna instancja gateway na dany port bazowy; dodatkowe gateway muszą używać izolowanych profili i unikalnych portów.
- Przetrwa crashe/SIGKILL bez pozostawiania nieaktualnych plików blokady.
- Szybko kończy działanie z jasnym błędem, gdy port sterowania jest już zajęty.
Mechanizm
- Gateway binduje listener WebSocket (domyślnie
ws://127.0.0.1:18789) natychmiast przy uruchomieniu, używając wyłącznego listenera TCP. - Jeśli bind zakończy się błędem
EADDRINUSE, uruchamianie zgłaszaGatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>"). - System operacyjny automatycznie zwalnia listener przy każdym zakończeniu procesu, także po crashach i SIGKILL — nie jest potrzebny osobny plik blokady ani krok czyszczenia.
- Przy zamykaniu gateway zamyka serwer WebSocket i bazowy serwer HTTP, aby szybko zwolnić port.
Powierzchnia błędów
- Jeśli port jest zajęty przez inny proces, uruchamianie zgłasza
GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>"). - Inne błędy bindowania są zgłaszane 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 przez
openclaw gateway --port <port>. - Aplikacja macOS nadal utrzymuje własną lekką blokadę PID przed uruchomieniem gateway; blokada środowiska uruchomieniowego jest wymuszana przez bind WebSocket.
Powiązane
- Wiele Gateway — uruchamianie wielu instancji z unikalnymi portami
- Rozwiązywanie problemów — diagnozowanie
EADDRINUSEi konfliktów portów