Gateway Lock
Zuletzt aktualisiert: 11.12.2025
Warum
- Es soll nur eine Gateway-Instanz pro Basis-Port auf demselben Host laufen. Weitere Gateways müssen isolierte Profile und eigene Ports verwenden.
- Bei Abstürzen oder SIGKILL bleiben keine verwaisten Lock-Dateien zurück.
- Bei bereits belegtem Control-Port gibt es sofort eine klare Fehlermeldung.
Mechanismus
- Das Gateway bindet den WebSocket-Listener (Standard:
ws://127.0.0.1:18789) direkt beim Start mit einem exklusiven TCP-Listener. - Schlägt die Bindung mit
EADDRINUSEfehl, wirft der Start einenGatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>"). - Das Betriebssystem gibt den Listener automatisch frei, wenn der Prozess beendet wird — auch bei Abstürzen und SIGKILL. Eine separate Lock-Datei oder Aufräumschritte sind nicht nötig.
- Beim Herunterfahren schließt das Gateway den WebSocket-Server und den darunterliegenden HTTP-Server, um den Port schnell freizugeben.
Fehlermeldungen
- Wenn ein anderer Prozess den Port belegt, wirft der Start einen
GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>"). - Andere Bindungsfehler erscheinen als
GatewayLockError("failed to bind gateway socket on ws://127.0.0.1:<port>: …").
Hinweise zum Betrieb
- Wenn der Port von einem anderen Prozess belegt ist, erscheint dieselbe Fehlermeldung. Gib den Port frei oder wähle einen anderen mit
openclaw gateway --port <port>. - Die macOS-App verwendet zusätzlich einen eigenen leichtgewichtigen PID-Guard, bevor sie das Gateway startet. Die eigentliche Laufzeitsperre wird durch die WebSocket-Bindung durchgesetzt.