Baptiste Daroussin, član FreeBSD Core tima i autor pkg upravitelja paketa, razvija novi upravitelj sistema za FreeBSD - rcd. rcd upravitelj sistema poziva se procesom init umjesto /etc/rc, čita konfiguracijske datoteke servisa (/etc/rcd.d/*.ucl), gradi stablo zavisnosti i pokreće servise paralelno kad god je to moguće. Zatim prati servise i ponovo ih pokreće ako je potrebno.
Kontrola pozadinskog procesa i operacija sa servisima može se izvršiti direktnim slanjem komandi na UNIX socket ili korištenjem uslužnog programa komandne linije rctl. Jedinične datoteke sa parametrima servisa su formatirane u UCL-u, koji podsjeća na format nginx-a i veže konfiguracijske datoteke sa elementima posuđenim iz JSON-a radi pojednostavljenja automatske obrade. Moguće je kreirati šablone tipičnih jedinica datoteka i pisati ugrađene rukovaoce u Lua jeziku. Primjer jedinice datoteke za pokretanje nginx-a: 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 = { akcija = "uskrati"; količina = "2g"; }; pcpu = { akcija = "prigušnica"; količina = "80"; }; }
Umjesto korištenja PID datoteka, praćenje aktivnosti pokrenutih procesa vrši se korištenjem deskriptora koje vraća sistemski poziv pdfork(). Postoji podrška za aktiviranje servisa samo kada se pristupi mrežnom socketu i mogućnost zaštite važnih servisa od prisilnog prekida u slučaju nedostatka memorije. Verzija rcd pozadinskog procesa može se ažurirati u hodu bez gubitka stanja.
rctl se koristi za ograničavanje resursa dostupnih servisu, a servisi se mogu pokretati u zatvorenom okruženju za potpunu izolaciju. Pristup UNIX kontrolnom socketu može se konfigurirati za pojedinačne servise. Podržan je režim mirovanja.
Sistemski menadžer je u potpunosti kompatibilan sa postojećim sistemom sekvencijalnog pokretanja rc.d servisa i može se koristiti bez modifikacije postojećih rc.d skripti i konfiguracijskih datoteka. Jednostavno instalirajte rcd na pokrenuti sistem i nakon ponovnog pokretanja, sve će nastaviti funkcionirati kao i prije, s izuzetkom smanjenog vremena pokretanja zbog paralelnog pokretanja servisa. Ova kompatibilnost će pojednostaviti migraciju sistema na rcd i omogućiti postepenu konverziju postojećih rc.d skripti u format unit datoteke.
Radi kompatibilnosti sa rc.d, podržan je poseban "legacy" tip jedinice. Rcd skenira sadržaj /etc/rc.d/ i /usr/local/etc/rc.d/, analizira zaglavlja PROVIDE/REQUIRE/BEFORE/KEYWORD u skriptama, čita postavke rc.conf i određuje stanje izvršavanja skripte, a zatim obrađuje svaku skriptu kao naslijeđenu virtuelnu jedinicu. Kada se koristi naredba rcctl za upravljanje takvim virtuelnim jedinicama, operacije se prevode u naslijeđeni format; na primjer, izvršavanje "rcctl reload sshd" će pokrenuti "/etc/rc.d/sshd reload."
izvor: opennet.ru
