Zum Hauptinhalt springen

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 EADDRINUSE fehlschlägt, wirft der Start GatewayLockError("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