يعمل باتيست داروسين، عضو فريق FreeBSD الأساسي ومطور مدير الحزم pkg، على تطوير مدير نظام جديد لـ FreeBSD يُدعى rcd. يتم استدعاء مدير النظام rcd بواسطة عملية بدء التشغيل (init) بدلاً من /etc/rc، ويقرأ ملفات تهيئة الخدمات (/etc/rcd.d/*.ucl)، ويبني شجرة التبعيات، ويبدأ تشغيل الخدمات بالتوازي كلما أمكن ذلك. ثم يراقب الخدمات ويعيد تشغيلها عند الضرورة.
يمكن التحكم في العمليات الخلفية والخدمات عن طريق إرسال الأوامر مباشرةً إلى مقبس UNIX أو باستخدام أداة سطر الأوامر rctl. تُنسق ملفات الوحدات التي تحتوي على معلمات الخدمة بتنسيق UCL، وهو تنسيق مشابه لتنسيق ملفات تكوين nginx وbind، مع عناصر مُستعارة من JSON لتبسيط المعالجة الآلية. من الممكن إنشاء قوالب لملفات الوحدات النموذجية وكتابة معالجات مُدمجة بلغة Lua. مثال على ملف وحدة لتشغيل nginx: name = "nginx"; description = "Nginx HTTP Server"; type = "simple"; command = "/usr/local/sbin/nginx"; command_args = "-g 'daemon off;'"; provides = ["nginx", "http"]; requires = ["NETWORKING", "sshd"]; restart { policy = "always"; max_retries = 10; delay = 2000; backoff = "linear"; } process { user = "www"; group = "www"; cpuset = "0-3"; } rctl { memoryuse = { action = "deny"; amount = "2g"; }; pcpu = { action = "throttle"; amount = "80"; }; }
بدلاً من استخدام ملفات PID، يتم تتبع نشاط العمليات الجارية باستخدام مُعرّفات تُعيدها دالة النظام pdfork(). يدعم النظام تفعيل الخدمات فقط عند الوصول إلى منفذ الشبكة، كما يوفر إمكانية حماية الخدمات المهمة من الإنهاء القسري في حال انخفاض الذاكرة. ويمكن تحديث إصدار عملية rcd الخلفية ديناميكيًا دون فقدان أي بيانات.
يُستخدم الأمر rctl لتقييد الموارد المتاحة للخدمة، ويمكن تشغيل الخدمات في بيئات معزولة تمامًا. كما يمكن تهيئة الوصول إلى مقبس التحكم في نظام يونكس لكل خدمة على حدة. ويدعم النظام وضع السكون.
مدير النظام متوافق تمامًا مع نظام بدء التشغيل التسلسلي لخدمة rc.d الحالي، ويمكن استخدامه دون تعديل نصوص rc.d وملفات التكوين الموجودة. ما عليك سوى تثبيت rcd على نظام قيد التشغيل، وبعد إعادة التشغيل، سيستمر كل شيء في العمل كما كان من قبل، باستثناء تقليل وقت بدء التشغيل بفضل بدء تشغيل الخدمة بالتوازي. هذا التوافق سيُسهّل عملية نقل الأنظمة إلى rcd، ويسمح بالتحويل التدريجي لنصوص rc.d الحالية إلى تنسيق ملف الوحدة.
لضمان التوافق مع rc.d، يدعم Rcd نوعًا خاصًا من الوحدات "القديمة". يقوم Rcd بفحص محتويات /etc/rc.d/ و /usr/local/etc/rc.d/، ويحلل رؤوس PROVIDE/REQUIRE/BEFORE/KEYWORD في البرامج النصية، ويقرأ إعدادات rc.conf، ويحدد حالة تنفيذ البرنامج النصي، ثم يعالج كل برنامج نصي كوحدة افتراضية قديمة. عند استخدام الأمر rcctl لإدارة هذه الوحدات الافتراضية، تُترجم العمليات إلى التنسيق القديم؛ على سبيل المثال، سيؤدي تنفيذ "rcctl reload sshd" إلى تشغيل "/etc/rc.d/sshd reload".
المصدر: opennet.ru
