إعادة التحميل الفوري
يدعم PRX إعادة التحميل الفوري لمعظم تغييرات الإعدادات. عند تحرير config.toml (أو أي جزء في config.d/)، تُكتشف التغييرات وتُطبَّق خلال ثوانٍ -- بدون الحاجة لإعادة التشغيل.
كيف يعمل
يستخدم PRX آلية من ثلاث طبقات لتحديثات الإعدادات الحية:
مراقب الملفات -- يراقب نظام ملفات
notifyمجلد الإعدادات (كلاً منconfig.tomlوشجرةconfig.d/بالكامل) بحثًا عن أحداث الكتابة.التأخير -- تُؤخَّر الأحداث بنافذة مدتها ثانية واحدة لدمج عمليات الكتابة المتتالية السريعة (مثل المحررات التي تكتب ثم تعيد التسمية).
الاستبدال الذري -- عند اكتشاف تغيير، يقوم PRX بـ:
- حساب بصمة SHA-256 للإعدادات الجديدة
- مقارنتها بآخر بصمة معروفة (يتخطى إذا كانت متطابقة)
- تحليل TOML الجديد إلى بنية
Config - عند النجاح: نشر الإعدادات الجديدة ذريًا عبر
ArcSwap(بدون قفل) - عند الفشل: الاحتفاظ بالإعدادات السابقة وتسجيل تحذير
يضمن نوع SharedConfig (Arc<ArcSwap<Config>>) أن جميع المكونات التي تقرأ الإعدادات تحصل على لقطة متسقة بدون تنافس. تستدعي القراءات .load_full() للحصول على لقطة Arc<Config> تبقى صالحة حتى لو استُبدلت الإعدادات أثناء الاستخدام.
ما هو قابل لإعادة التحميل الفوري
التغييرات التالية تسري فورًا (خلال ثانية واحدة تقريبًا):
| الفئة | أمثلة |
|---|---|
| إعدادات المزود | default_provider، default_model، default_temperature، api_key، api_url |
| إعدادات القنوات | allowed_users في Telegram، mention_only في Discord، channel_id في Slack، إلخ. |
| إعدادات الذاكرة | backend، auto_save، embedding_provider، فترات الاحتفاظ |
| إعدادات الموجه | enabled، الأوزان (alpha/beta/gamma/delta/epsilon)، عتبات Automix |
| إعدادات الأمان | واجهة صندوق الرمل، حدود الموارد، إعدادات التدقيق |
| إعدادات الاستقلالية | قواعد النطاق، مستويات الاستقلالية |
| إعدادات MCP | تعريفات الخوادم، المهل، قوائم سماح الأدوات |
| إعدادات البحث على الويب | enabled، provider، max_results |
| إعدادات المتصفح | enabled، allowed_domains |
| إعدادات Xin | enabled، interval_minutes، حدود المهام |
| إعدادات التكلفة | daily_limit_usd، monthly_limit_usd، التسعير |
| إعدادات الموثوقية | max_retries، fallback_providers |
| إعدادات المراقبة | backend، نقطة نهاية OTLP |
| إعدادات الوكيل | عناوين URL للوكيل، قوائم عدم الوكيل، النطاق |
ما يتطلب إعادة تشغيل
عدد صغير من الإعدادات مرتبطة ببدء التشغيل ولا يمكن تغييرها أثناء التشغيل:
| الإعداد | السبب |
|---|---|
[gateway] host | مستمع TCP يُربط مرة واحدة عند بدء التشغيل |
[gateway] port | مستمع TCP يُربط مرة واحدة عند بدء التشغيل |
إعدادات [tunnel] | اتصالات النفق تُنشأ عند بدء التشغيل |
| رموز بوتات القنوات | اتصالات البوتات (استطلاع Telegram الطويل، بوابة Discord، مقبس Slack) تُهيّأ مرة واحدة |
لهذه الإعدادات، يجب إعادة تشغيل خادم PRX:
# إذا كان يعمل كخدمة systemd
sudo systemctl restart openprx
# إذا كان يعمل في المقدمة
# أوقفه بـ Ctrl+C، ثم شغّله مرة أخرى
prxأمر إعادة التحميل في سطر الأوامر
يمكنك تشغيل إعادة تحميل الإعدادات يدويًا دون تحرير الملف:
prx config reloadهذا مكافئ لاكتشاف مراقب الملفات لتغيير. يعيد قراءة وتحليل ملفات الإعدادات ويستبدل الإعدادات الحية ذريًا. هذا مفيد عندما:
- عدّلت الملف لكن المراقب فاتته الحدث (نادر)
- تريد فرض إعادة تحميل بعد تحديث متغيرات البيئة
- تكتب سكربتات لتغيير الإعدادات
معالجة الأخطاء
إذا احتوى ملف الإعدادات الجديد على أخطاء:
- أخطاء بنية TOML -- يرفض المحلل الملف. تُحتفظ الإعدادات السابقة. يُسجَّل تحذير بتفاصيل خطأ التحليل.
- قيم حقول غير صالحة -- يكتشف التحقق مشاكل مثل
confidence_threshold > 1.0أوpremium_model_idفارغ عندما يكون Automix مفعّلاً. تُحتفظ الإعدادات السابقة. - ملف مفقود -- إذا حُذف
config.toml، يسجّل المراقب خطأ لكن الإعدادات في الذاكرة تستمر في العمل.
في جميع حالات الخطأ، يستمر PRX في العمل بآخر إعدادات صالحة معروفة. لا تُفقد أي بيانات ولا يحدث انقطاع في الخدمة.
مراقبة إعادات التحميل
يحتفظ HotReloadManager بعداد reload_version أحادي الاتجاه يزداد مع كل إعادة تحميل ناجحة. يمكنك التحقق من الإصدار الحالي عبر نقطة نهاية حالة البوابة:
curl http://localhost:16830/api/statusتتضمن الاستجابة عدد إعادات التحميل الحالي، مما يساعدك في التحقق من تطبيق تغييراتك.
إعادة تحميل الملفات المقسّمة
عند استخدام ملفات إعدادات مقسّمة (config.d/*.toml)، يراقب المراقب مجلد config.d/ بالكامل بشكل متكرر. يؤدي التغيير في أي جزء .toml إلى إعادة دمج كاملة وإعادة تحميل لجميع الإعدادات. هذا يعني:
- تحرير
config.d/channels.tomlيعيد تحميل الإعدادات بالكامل (ليس فقط القنوات) - إضافة أو إزالة ملف جزء يؤدي إلى إعادة تحميل
- ترتيب الدمج أبجدي حسب اسم الملف، مع أولوية الأجزاء على
config.toml