التكوين والعمليات

قفل البوابة

آخر تحديث: 2025-12-11

السبب

  • ضمان تشغيل نسخة بوابة واحدة فقط لكل منفذ أساسي على نفس المضيف؛ يجب على البوابات الإضافية استخدام ملفات تعريف معزولة ومنافذ فريدة.
  • تحمل الأعطال/إشارة SIGKILL دون ترك ملفات قفل قديمة.
  • الفشل السريع مع رسالة خطأ واضحة عندما يكون منفذ التحكم مشغولاً بالفعل.

الآلية

  • تربط البوابة مستمع WebSocket (الافتراضي ws://127.0.0.1:18789) فور بدء التشغيل باستخدام مستمع TCP حصري.
  • إذا فشل الربط مع EADDRINUSE، يطرح بدء التشغيل GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>").
  • يقوم نظام التشغيل بإطلاق المستمع تلقائياً عند أي خروج للعملية، بما في ذلك الأعطال وSIGKILL—لا حاجة لملف قفل منفصل أو خطوة تنظيف.
  • عند الإغلاق، تغلق البوابة خادم WebSocket والخادم HTTP الأساسي لتحرير المنفذ بسرعة.

سطح الخطأ

  • إذا كان هناك عملية أخرى تحتجز المنفذ، يطرح بدء التشغيل GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>").
  • تظهر إخفاقات الربط الأخرى كـ GatewayLockError("failed to bind gateway socket on ws://127.0.0.1:<port>: …").

ملاحظات تشغيلية

  • إذا كان المنفذ مشغولاً بواسطة عملية أخرى، يكون الخطأ نفسه؛ حرر المنفذ أو اختر آخر باستخدام openclaw gateway --port <port>.
  • لا يزال تطبيق macOS يحافظ على حارس PID خفيف الوزن الخاص به قبل إنشاء البوابة؛ يتم فرض قفل وقت التشغيل من خلال ربط WebSocket.

التسجيلأداة التنفيذ في الخلفية وإدارة العمليات