FreeBSD Çekirdek Ekibi üyesi ve pkg paket yöneticisinin yazarı Baptiste Daroussin, FreeBSD için yeni bir sistem yöneticisi olan rcd'yi geliştiriyor. rcd sistem yöneticisi, /etc/rc yerine init işlemi tarafından çağrılıyor, servis yapılandırma dosyalarını (/etc/rcd.d/*.ucl) okuyor, bir bağımlılık ağacı oluşturuyor ve mümkün olduğunca servisleri paralel olarak başlatıyor. Ardından servisleri izliyor ve gerekirse yeniden başlatıyor.
Arka plan sürecinin kontrolü ve servislerle yapılan işlemler, komutların doğrudan bir UNIX soketine iletilmesi veya rctl komut satırı yardımcı programının kullanılmasıyla gerçekleştirilebilir. Servis parametrelerini içeren birim dosyaları, nginx formatına benzeyen UCL formatında biçimlendirilir ve otomatik işlemeyi basitleştirmek için JSON'dan ödünç alınan öğelerle bağlama yapılandırma dosyaları oluşturulur. Tipik birim dosyalarının şablonlarını oluşturmak ve Lua'da yerleşik işleyiciler yazmak mümkündür. Nginx'i başlatmak için bir birim dosyası örneği: name = "nginx"; description = "Nginx HTTP Sunucusu"; 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"; grup = "www"; işlemci kümesi = "0-3"; } rctl { bellek kullanımı = { eylem = "reddet"; miktar = "2g"; }; pcpu = { eylem = "kısıtla"; miktar = "80"; }; }
PID dosyaları yerine, çalışan süreçlerin etkinliği, pdorf() sistem çağrısı tarafından döndürülen tanımlayıcılar kullanılarak izlenir. Yalnızca bir ağ soketine erişildiğinde hizmetlerin etkinleştirilmesi ve düşük bellek koşullarında önemli hizmetlerin zorla sonlandırılmaya karşı korunması özelliği desteklenmektedir. rcd arka plan sürecinin sürümü, durum kaybı olmadan anında güncellenebilir.
rctl, bir servise ayrılan kaynakları sınırlamak için kullanılır ve servisler, tam izolasyon için kapalı ortamlarda çalıştırılabilir. UNIX kontrol soketine erişim, her bir servis için ayrı ayrı yapılandırılabilir. Uyku modu desteklenmektedir.
Sistem yöneticisi, mevcut rc.d hizmetinin sıralı başlatma sistemiyle tamamen geriye dönük uyumludur ve mevcut rc.d komut dosyaları ve yapılandırma dosyalarında değişiklik yapılmadan kullanılabilir. Çalışan bir sisteme rcd'yi kurmanız yeterlidir ve yeniden başlatmanın ardından, paralelleştirilmiş hizmet başlatma nedeniyle önyükleme sürelerinin kısalması dışında her şey eskisi gibi çalışmaya devam edecektir. Bu uyumluluk, sistemlerin rcd'ye geçişini basitleştirecek ve mevcut rc.d komut dosyalarının kademeli olarak birim dosya formatına dönüştürülmesine olanak sağlayacaktır.
rc.d ile uyumluluk için özel bir "eski" birim türü desteklenmektedir. Rcd, /etc/rc.d/ ve /usr/local/etc/rc.d/ içeriklerini tarar, komut dosyalarındaki PROVIDE/REQUIRE/BEFORE/KEYWORD başlıklarını ayrıştırır, rc.conf ayarlarını okur ve komut dosyasının yürütme durumunu belirler, ardından her komut dosyasını eski bir sanal birim olarak işler. Bu tür sanal birimleri yönetmek için rcctl komutu kullanıldığında, işlemler eski biçime çevrilir; örneğin, "rcctl reload sshd" komutunu çalıştırmak "/etc/rc.d/sshd reload" komutunu çalıştıracaktır.
Kaynak: opennet.ru
