قفل Gateway
لماذا
- التأكد من تشغيل مثيل gateway واحد فقط لكل منفذ أساسي على المضيف نفسه؛ ويجب على أي gateway إضافية استخدام ملفات تعريف معزولة ومنافذ فريدة.
- الصمود أمام الأعطال/SIGKILL من دون ترك ملفات قفل قديمة.
- الفشل سريعًا برسالة واضحة عندما يكون منفذ التحكم مشغولًا بالفعل.
الآلية
- يقوم gateway بربط مستمع WebSocket (الافتراضي
ws://127.0.0.1:18789) فورًا عند بدء التشغيل باستخدام مستمع TCP حصري. - إذا فشل الربط مع
EADDRINUSE، فإن بدء التشغيل يطرحGatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>"). - يحرر نظام التشغيل المستمع تلقائيًا عند خروج أي عملية، بما في ذلك الأعطال وSIGKILL — ولا حاجة إلى ملف قفل منفصل أو خطوة تنظيف.
- عند الإيقاف، يغلق gateway خادم 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 خفيف خاص به قبل تشغيل gateway؛ لكن قفل وقت التشغيل يُفرض بواسطة ربط WebSocket.
ذو صلة
- Gateways متعددة — تشغيل عدة مثيلات بمنافذ فريدة
- استكشاف الأخطاء وإصلاحها — تشخيص
EADDRINUSEوتعارضات المنافذ