Gateway-Sperre
Warum
- Sicherstellen, dass pro Basis-Port auf demselben Host nur eine Gateway-Instanz läuft; zusätzliche Gateways müssen isolierte Profile und eindeutige Ports verwenden.
- Abstürze/SIGKILL überstehen, ohne veraltete Lock-Dateien zu hinterlassen.
- Schnell mit einem klaren Fehler fehlschlagen, wenn der Control-Port bereits belegt ist.
Mechanismus
- Das Gateway bindet den WebSocket-Listener (Standard
ws://127.0.0.1:18789) sofort beim Start mit einem exklusiven TCP-Listener. - Wenn das Binden mit
EADDRINUSEfehlschlägt, wirft der StartGatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>"). - Das Betriebssystem gibt den Listener bei jedem Prozessende automatisch frei, einschließlich Abstürzen und SIGKILL — es ist keine separate Lock-Datei und kein Bereinigungsschritt erforderlich.
- Beim Herunterfahren schließt das Gateway den WebSocket-Server und den zugrunde liegenden HTTP-Server, um den Port schnell freizugeben.
Fehleroberfläche
- Wenn ein anderer Prozess den Port belegt, wirft der Start
GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>"). - Andere Bind-Fehler werden als
GatewayLockError("failed to bind gateway socket on ws://127.0.0.1:<port>: …")ausgegeben.
Betriebshinweise
- Wenn der Port von einem anderen Prozess belegt ist, ist der Fehler derselbe; geben Sie den Port frei oder wählen Sie einen anderen mit
openclaw gateway --port <port>. - Die macOS-App behält weiterhin ihren eigenen leichtgewichtigen PID-Schutz bei, bevor sie das Gateway startet; die Laufzeitsperre wird durch den WebSocket-Bind erzwungen.
Verwandt
- Mehrere Gateways — mehrere Instanzen mit eindeutigen Ports ausführen
- Fehlerbehebung — Diagnose von
EADDRINUSEund Portkonflikten