Baptiste Daroussin, člen základního týmu FreeBSD a autor správce balíčků pkg, vyvíjí pro FreeBSD nového správce systému – rcd. Správce systému rcd je volána procesem init namísto /etc/rc, čte konfigurační soubory služeb (/etc/rcd.d/*.ucl), vytváří strom závislostí a spouští služby paralelně, kdykoli je to možné. Poté služby monitoruje a v případě potřeby je restartuje.
Řízení procesů na pozadí a operací se službami lze provádět přímým přenosem příkazů do UNIXového socketu nebo pomocí utility příkazového řádku rctl. Soubory jednotek s parametry služeb jsou formátovány v UCL, který se podobá formátu nginx a konfigurační soubory binduji s prvky převzatými z JSON pro zjednodušení automatizovaného zpracování. Je možné vytvářet šablony typických souborů jednotek a psát vestavěné obslužné rutiny v jazyce Lua. Příklad souboru jednotek pro spuštění 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 = { akce = "zakázat"; množství = "2g"; }; pcpu = { akce = "škrticí klapka"; množství = "80"; }; }
Místo použití PID souborů se sledování aktivity spuštěných procesů provádí pomocí deskriptorů vracených systémovým voláním pdfork(). Existuje podpora pro aktivaci služeb pouze při přístupu k síťovému socketu a možnost ochrany důležitých služeb před nuceným ukončením v případě nedostatku paměti. Verzi procesu rcd na pozadí lze aktualizovat za chodu bez ztráty stavu.
Příkaz rctl se používá k omezení zdrojů dostupných pro službu a služby lze spouštět v uzavřených prostředích pro úplnou izolaci. Přístup k řídicímu socketu UNIX lze nakonfigurovat pro jednotlivé služby. Je podporován režim spánku.
Systémový správce je plně zpětně kompatibilní se stávajícím systémem sekvenčního spouštění služeb rc.d a lze jej používat bez úprav stávajících skriptů rc.d a konfiguračních souborů. Jednoduše nainstalujte rcd na běžící systém a po restartu bude vše fungovat jako dříve, s výjimkou zkrácených časů spouštění v důsledku paralelního spouštění služeb. Tato kompatibilita zjednoduší migraci systémů na rcd a umožní postupný převod stávajících skriptů rc.d do formátu souborů unit.
Pro kompatibilitu s rc.d je podporován speciální typ jednotky „legacy“. Rcd prohledává obsah souborů /etc/rc.d/ a /usr/local/etc/rc.d/, analyzuje hlavičky PROVIDE/REQUIRE/BEFORE/KEYWORD ve skriptech, čte nastavení rc.conf a určuje stav provádění skriptu. Poté každý skript zpracovává jako virtuální jednotku legacy. Při použití příkazu rcctl ke správě takových virtuálních jednotek jsou operace přeloženy do formátu legacy; například spuštění příkazu „rcctl reload sshd“ spustí příkaz „/etc/rc.d/sshd reload“.
Zdroj: opennet.ru
