Baptiste Daroussin, et medlem av FreeBSD Core Team og forfatteren av pakkebehandleren pkg, utvikler en ny systembehandler for FreeBSD – rcd. Systembehandleren rcd kalles av init-prosessen i stedet for /etc/rc, leser tjenestekonfigurasjonsfiler (/etc/rcd.d/*.ucl), bygger et avhengighetstre og starter tjenester parallelt når det er mulig. Deretter overvåker den tjenestene og starter dem på nytt om nødvendig.
Kontroll over bakgrunnsprosessen og operasjoner med tjenester kan utføres ved å overføre kommandoer direkte til en UNIX-socket eller ved å bruke kommandolinjeverktøyet rctl. Enhetsfiler med tjenesteparametere er formatert i UCL, som ligner formatet til nginx og binder konfigurasjonsfiler med elementer lånt fra JSON for å forenkle automatisert behandling. Det er mulig å lage maler av typiske enhetsfiler og skrive innebygde behandlere i Lua. Et eksempel på en enhetsfil for å starte nginx: name = "nginx"; description = "Nginx HTTP Server"; type = "simple"; command = "/usr/local/sbin/nginx"; command_args = "-g 'daemon off;'"; provides = ["nginx", "http"]; requires = ["NETTVERK", "sshd"]; restart { policy = "always"; max_retries = 10; delay = 2000; backoff = "linear"; } process { user = "www"; group = "www"; cpuset = "0-3"; } rctl { memoryuse = { action = "avslå"; amount = "2g"; }; pcpu = { action = "gass"; amount = "80"; }; }
I stedet for å bruke PID-filer, utføres sporing av aktiviteten til kjørende prosesser ved hjelp av beskrivelser som returneres av systemkallet pdfork(). Det er støtte for å aktivere tjenester bare når en nettverkskontakt er tilgjengelig, og muligheten til å beskytte viktige tjenester mot tvungen avslutning i tilfelle lavt minne. rcd-bakgrunnsprosessversjonen kan oppdateres underveis uten å miste tilstand.
rctl brukes til å begrense ressursene som er tilgjengelige for en tjeneste, og tjenester kan kjøres i fengslede miljøer for fullstendig isolasjon. Tilgang til UNIX-kontrollsokkelen kan konfigureres for individuelle tjenester. Hvilemodus støttes.
Systembehandleren er fullstendig bakoverkompatibel med det eksisterende sekvensielle oppstartssystemet for rc.d-tjenesten og kan brukes uten å endre eksisterende rc.d-skript og konfigurasjonsfiler. Bare installer rcd på et kjørende system, og etter en omstart vil alt fortsette å fungere som før, med unntak av reduserte oppstartstider på grunn av parallell tjenesteoppstart. Denne kompatibiliteten vil forenkle migreringen av systemer til rcd og tillate gradvis konvertering av eksisterende rc.d-skript til enhetsfilformat.
For kompatibilitet med rc.d støttes en spesiell "eldre" enhetstype. Rcd skanner innholdet i /etc/rc.d/ og /usr/local/etc/rc.d/, analyserer PROVIDE/REQUIRE/BEFORE/KEYWORD-overskrifter i skript, leser rc.conf-innstillinger og bestemmer skriptets utførelsesstatus, og behandler deretter hvert skript som en eldre virtuell enhet. Når du bruker rcctl-kommandoen til å administrere slike virtuelle enheter, oversettes operasjoner til det eldre formatet; for eksempel vil utføring av "rcctl reload sshd" kjøre "/etc/rc.d/sshd reload".
Kilde: opennet.ru
