باپتیست داروسین، یکی از اعضای تیم اصلی FreeBSD و نویسندهی مدیر بستهی pkg، در حال توسعهی یک مدیر سیستم جدید برای FreeBSD به نام rcd است. مدیر سیستم rcd به جای /etc/rc توسط فرآیند init فراخوانی میشود، فایلهای پیکربندی سرویس (/etc/rcd.d/*.ucl) را میخواند، یک درخت وابستگی میسازد و در صورت امکان، سرویسها را به صورت موازی راهاندازی میکند. سپس سرویسها را رصد کرده و در صورت لزوم آنها را مجدداً راهاندازی میکند.
کنترل فرآیند پسزمینه و عملیات با سرویسها را میتوان با ارسال مستقیم دستورات به یک سوکت یونیکس یا با استفاده از ابزار خط فرمان rctl انجام داد. فایلهای واحد با پارامترهای سرویس در UCL قالببندی میشوند که شبیه به قالب nginx است و فایلهای پیکربندی را با عناصر قرض گرفته شده از 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 برای محدود کردن منابع موجود برای یک سرویس استفاده میشود و سرویسها میتوانند در محیطهای محصور برای جداسازی کامل اجرا شوند. دسترسی به سوکت کنترل یونیکس را میتوان برای سرویسهای منفرد پیکربندی کرد. حالت خواب (sleep mode) پشتیبانی میشود.
مدیر سیستم کاملاً با سیستم راهاندازی ترتیبی سرویس rc.d موجود سازگار است و میتوان بدون تغییر اسکریپتها و فایلهای پیکربندی rc.d موجود از آن استفاده کرد. کافیست rcd را روی یک سیستم در حال اجرا نصب کنید و پس از راهاندازی مجدد، همه چیز مانند قبل به کار خود ادامه خواهد داد، به جز کاهش زمان بوت به دلیل راهاندازی موازی سرویس. این سازگاری، مهاجرت سیستمها به rcd را ساده کرده و امکان تبدیل تدریجی اسکریپتهای rc.d موجود به فرمت فایل واحد را فراهم میکند.
برای سازگاری با rc.d، از یک نوع واحد ویژه "legacy" پشتیبانی میشود. Rcd محتویات /etc/rc.d/ و /usr/local/etc/rc.d/ را اسکن میکند، هدرهای PROVIDE/REQUIRE/BEFORE/KEYWORD را در اسکریپتها تجزیه میکند، تنظیمات rc.conf را میخواند و وضعیت اجرای اسکریپت را تعیین میکند، سپس هر اسکریپت را به عنوان یک واحد مجازی legacy پردازش میکند. هنگام استفاده از دستور rcctl برای مدیریت چنین واحدهای مجازی، عملیات به قالب legacy ترجمه میشوند. به عنوان مثال، اجرای "rcctl reload sshd" باعث اجرای "/etc/rc.d/sshd reload" میشود.
منبع: opennet.ru
