Батист Даруссен (Baptiste Daroussin), член FreeBSD Core Team та автор пакетного менеджера pkg, розвиває новий системний менеджер для FreeBSD - rcd. Системний менеджер rcd викликається init-процесом замість /etc/rc, читає файли конфігурації сервісів (/etc/rcd.d/*.ucl), будує дерево залежностей і запускає сервіси наскільки можна паралельно друг з одним, після чого відстежує роботу сервісів і за необхідності їх перезапускает.
Управління фоновим процесом та операції з сервісами може здійснюватись через пряму передачу команд у UNIX-сокет або за допомогою утиліти командного рядка rctl. Unit-файли з параметрами сервісів оформляються у форматі UCL, що нагадує формат файлів конфігурації nginx та bind з елементами для спрощення автоматизованої обробки, запозиченими з JSON. Надається можливість створення шаблонів типових unit-файлів та написання вбудованих обробників мовою Lua. Приклад unit-файлу для запуску 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"; }; }
Замість роботи з PID-файлами відстеження активності запущених процесів здійснюється за допомогою дескрипторів, що повертаються системним викликом pdfork(). Є підтримка активації сервісів тільки при зверненні до мережного сокету та можливість захисту важливих сервісів від примусового завершення у разі нестачі пам'яті в системі. Можливе оновлення версії фонового процесу rcd на льоту без втрати стану.
Для обмеження доступних сервісу ресурсів застосовується rctl, а повної ізоляції сервісів підтримується їх запуск в jail-оточеннях. Можливе налаштування доступу до керуючого UNIX-сокету в прив'язці до окремих сервісів. Підтримується перехід у режим сну.
Системний менеджер повністю сумісний з існуючою системою послідовного запуску сервісів rc.d і може працювати без зміни наявних rc.d-скриптів і файлів конфігурації. Достатньо встановити rcd на працюючу систему і після перезапуску все продовжить функціонувати як раніше, крім скорочення часу завантаження рахунок розпаралелювання запуску сервісів. Подібна сумісність спростить міграцію систем на rcd і дозволить поступово переводити у формат unit-файлів наявні rc.d-скрипти.
Для сумісності з rc.d підтримується спеціальний тип unit-ів "legacy". Rcd сканує вміст /etc/rc.d/ та /usr/local/etc/rc.d/, розбирає заголовки PROVIDE/REQUIRE/BEFORE/KEYWORD у скриптах, читає налаштування rc.conf і визначає стан запуску скриптів, після чого обробляє кожен скрипт як віртуальний lega. У разі використання команди rcctl для керування подібними віртуальними unit-ами операції транслюються у старий формат, наприклад, виконання rcctl reload sshd призведе до запуску /etc/rc.d/sshd reload.
Джерело: opennet.ru
