Gateway

Gateway kilidi

Neden

  • Aynı ana makinede aynı temel bağlantı noktası için yalnızca bir Gateway örneğinin çalışmasını sağlayın; ek Gateway'ler izole profiller ve benzersiz bağlantı noktaları kullanmalıdır.
  • Çökme/SIGKILL durumlarından eski kilit dosyaları bırakmadan kurtulun.
  • Denetim bağlantı noktası zaten kullanılıyorsa net bir hatayla hızlıca başarısız olun.

Mekanizma

  • Gateway önce durum kilidi dizini altında yapılandırma başına bir kilit dosyası edinir ve yapılandırılmış bağlantı noktasında mevcut bir dinleyici olup olmadığını yoklar.
  • Kaydedilen kilit sahibi artık yoksa, bağlantı noktası boşsa veya kilit bayatsa, başlatma kilidi geri alır ve devam eder.
  • Gateway ardından özel bir TCP dinleyicisi kullanarak HTTP/WebSocket dinleyicisini bağlar (varsayılan ws://127.0.0.1:18789).
  • Bağlama EADDRINUSE ile başarısız olursa başlatma GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>") hatası fırlatır.
  • Kapatma sırasında Gateway HTTP/WebSocket sunucusunu kapatır ve kilit dosyasını kaldırır.

Hata yüzeyi

  • Başka bir süreç bağlantı noktasını tutuyorsa başlatma GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>") hatası fırlatır.
  • Diğer bağlama hataları GatewayLockError("failed to bind gateway socket on ws://127.0.0.1:<port>: …") olarak görünür.

Operasyonel notlar

  • Bağlantı noktası başka bir süreç tarafından kullanılıyorsa hata aynıdır; bağlantı noktasını boşa çıkarın veya openclaw gateway --port <port> ile başka bir tane seçin.
  • Bir hizmet denetleyicisi altında, mevcut sağlıklı bir /healthz yanıtlayıcısı gören yeni Gateway süreci denetimi o süreçte bırakır. systemd üzerinde, yinelenen başlatıcı 78 koduyla çıkar; böylece varsayılan RestartPreventExitStatus=78, Restart=always ayarının bir kilit veya EADDRINUSE çakışmasında döngüye girmesini durdurur. Mevcut süreç hiçbir zaman sağlıklı hale gelmezse yeniden denemeler sınırlandırılır ve başlatma sonsuza kadar döngüye girmek yerine net bir kilit hatasıyla başarısız olur.
  • macOS uygulaması, Gateway'i başlatmadan önce kendi hafif PID korumasını hâlâ sürdürür; çalışma zamanı kilidi, kilit dosyası ve HTTP/WebSocket bağlamasıyla uygulanır.

İlgili

  • Birden Fazla Gateway — benzersiz bağlantı noktalarıyla birden fazla örnek çalıştırma
  • Sorun GidermeEADDRINUSE ve bağlantı noktası çakışmalarını tanılama