Baptiste Daroussin, medlem av FreeBSD Core Team och författare av pakethanteraren pkg, utvecklar en ny systemhanterare för FreeBSD â rcd. Systemhanteraren rcd anropas av init-processen istĂ€llet för /etc/rc, lĂ€ser konfigurationsfiler för tjĂ€nster (/etc/rcd.d/*.ucl), bygger ett beroendetrĂ€d och startar tjĂ€nster sĂ„ mycket som möjligt parallellt med varandra, varefter den övervakar tjĂ€nsternas arbete och om nödvĂ€ndigt startar om dem.
Hantera bakgrundsprocesser och tjÀnsteoperationer kan ske genom att direkt skicka kommandon till UNIX-socketen eller med hjÀlp av kommandoradsverktyget rctl. Enhetsfiler med tjÀnsteparametrar utformas i UCL-format, som pÄminner om konfigurationsfiler för nginx och bind med element för förenklad automatiserad bearbetning, lÄnat frÄn JSON. Det finns möjlighet att skapa mallar för typiska enhetsfiler och skriva inbyggda bearbetare pÄ Lua. Exempel pÄ en enhetsfil för att starta 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"; }; }
IstÀllet för att arbeta med PID-filer övervakas aktiviteten hos körande processer med hjÀlp av deskriptorer som returneras av systemanropet pdfork(). Det finns stöd för att aktivera tjÀnster endast vid begÀran till nÀtverksocketen och möjligheten att skydda viktiga tjÀnster frÄn tvÄngsavstÀngning i hÀndelse av minnesbrist i systemet. Det Àr möjligt att uppdatera versionen av bakgrundsprocessen rcd i realtid utan att förlora tillstÄndet.
För att begrÀnsa de resurser som tjÀnsten har tillgÄng till anvÀnds rctl, och för fullstÀndig isolering av tjÀnster stödjer man deras start i jail-miljöer. à tkomst till den styrande UNIX-socketen kan konfigureras för att vara kopplad till specifika tjÀnster. Det finns stöd för att övergÄ i vilolÀge.
Systemhanteraren Àr helt bakÄtkompatibel med det befintliga systemet för sekventiell start av tjÀnster rc.d och kan fungera utan att Àndra de befintliga rc.d-skript och konfigurationsfiler. Det rÀcker med att installera rcd pÄ ett fungerande system, och efter en omstart fortsÀtter allt att fungera som tidigare, förutom att laddningstiden förkortas genom att starta tjÀnster parallellt. Denna kompatibilitet kommer att förenkla migreringen av system till rcd och möjliggöra en gradvis övergÄng av befintliga rc.d-skript till enhetstexter.
För kompatibilitet med rc.d stöds en sÀrskild typ av enheter "legacy". Rcd skannar innehÄllet i /etc/rc.d/ och /usr/local/etc/rc.d/, analyserar rubrikerna PROVIDE/REQUIRE/BEFORE/KEYWORD i skripten, lÀser instÀllningarna i rc.conf och faststÀller statusen för skriftens start, för att sedan behandla varje skript som en virtuell legacy-enhet. Vid anvÀndning av kommandot rcctl för att hantera dessa virtuella enheter översÀtts operationerna till det gamla formatet, till exempel, kommandot "rcctl reload sshd" kommer att leda till att " /etc/rc.d/sshd reload" körs.
KĂ€lla: opennet.ru
