Launchd
launchd — система инициализации в macOS с открытым исходным кодом, созданная для замены SysVinit и SystemStarter. Процесс launchd имеет PID 1 и занимается тем, что запускает другие процессы и перезапускает их в случае сбоя, то есть выполняет функции init (в новых версиях Linux systemd). Также он заменяет cron. Процессы, запускаемые после запуска системы до входа в систему, записываются в каталог /Library/LaunchDaemons. Процессы, запускаемые после входа в систему — в каталоге /Library/LaunchAgents. В этих каталогах создаются файлы с xml-содержимым, которые управляют запуском процессов. Были попытки портировать launchd для FreeBSD и производных систем. КомпонентыВ launchd есть две основные программы: launchd и launchctl. launchd — управляет демонами как на уровне системы, так и на уровне пользователя. Как и xinetd, launchd может запускать демоны по требованию. Как и watchdogd, launchd может отслеживать демонов, чтобы убедиться, что они продолжают работать. launchctl — это приложение командной строки, которое обращается к launchd с использованием IPC и знает, как анализировать файлы, используемые для описания запускаемых заданий, и сериализовывать их с использованием специализированного словарного протокола, который понимает launchd. launchctl может использоваться для загрузки и выгрузки демонов, запуска и остановки запускаемых контролируемых заданий, получения статистики использования системы для launchd и его дочерних процессов, а также для настройки параметров среды. launchdУ launchd есть две основные задачи. Первый — это загрузить систему, а второй — загрузка и обслуживание сервисов. Вот упрощенный вид запуска системы Mac OS X Tiger на PowerPC.
launchd сильно отличается от SystemStarter в том, что он может не запускать все демоны во время загрузки. Ключом к launchd, как и в xinetd, является запуск демонов по требованию. Когда launchctl просматривает списки заданий во время загрузки, он запрашивает launchd зарезервировать и прослушивать все порты, запрошенные этими заданиями. Если это указано в листе с помощью клавиши «OnDemand», в данный момент демон фактически не загружается. Скорее, launchd будет прослушивать порт, запускать демона при необходимости и выключать его, когда он больше не нужен. После загрузки демона launchd будет отслеживать его и при необходимости следить за тем, чтобы он работал. Таким образом, он похож на watchdogd и разделяет требование watchdogd о том, чтобы процессы не пытались разветвляться или демонизироваться самостоятельно. Если процесс уходит в фоновый режим, launchd потеряет его и попытается перезапустить его. Mac OS X Tiger, следовательно, загружается намного быстрее, чем предыдущие версии. Система только регистрирует демоны, которые должны работать, и фактически не запускает их, пока они не понадобятся. Фактически, индикатор выполнения, который появляется во время загрузки, является просто плацебо, названный WaitingForLoginWindow[1] который на самом деле не показывает ничего, кроме времени. Самая сложная часть для управления во время запуска launchd — это зависимости. SystemStarter имеет очень простую систему зависимостей, которая использует ключи «Использует», «Требуется» и «Предоставляет» в списке элементов запуска. При создании зависимостей для запуска на Tiger существует две основные стратегии: IPC позволяет демонам общаться между собой для выработки зависимостей, или демоны могут просматривать файлы или пути изменений. SystemStarter все еще поддерживался до OS X Mountain Lion, но был удален в OS X Yosemite. launchctlВ launchd управление службами централизовано в приложении launchctl. Сам по себе launchctl может принимать команды из командной строки, из стандартного входа или работать в интерактивном режиме. С привилегиями суперпользователя, launchctl может использоваться для внесения изменений в глобальном масштабе. launchctl связывается с launchd через Mach-специфический механизм IPC. Список свойствСписок свойств (plist) — это тип файла, который launchd использует для конфигурации программы. Когда launchd сканирует папку или задание отправляется с launchctl, он читает файл plist, который описывает, как программа должна быть запущена. Список часто используемых ключей приведен ниже. Все ключи являются необязательными, если не указано иное. Полный список см. На странице руководства Apple для launchd.plist[2].
СокетыИмя каждого ключа в разделе «Сокеты» будет помещено в среду задания при его запуске, а файловый дескриптор данного сокета будет доступен в этой переменной среды. Это отличается от активации сокета в systemd тем, что имя определения сокета внутри конфигурации задания жестко запрограммировано в приложении. Этот протокол менее гибок, хотя он, как и systemd, не требует, чтобы демон жестко закодировал начальный дескриптор файла (по состоянию на 2014 год он равен 3[3]). ИсторияПрограммное обеспечение было разработано и написано Дейвом Заржицким в Apple. Компания планировала заменить все следующее в среде macOS - Большинство из этих вещей были отменены, когда launchd был представлен с Mac OS X v10.4 (Tiger). В 2005 году R. Tyler Croy перенес запуск FreeBSD в рамках проекта Google Summer of Code. Он не может быть запущен как PID 1 (только инициализация сеанса), и на этой платформе он обычно не используется.[4] В 2006 году дистрибутив Ubuntu Linux рассматривался с использованием launchd. Эта опция была отклонена, поскольку исходный код был под лицензией Apple Public License — описанной как «неизбежная проблема с лицензией»[5]. Вместо этого разработчики Ubuntu разработали и переключилась на собственный инструмент управления сервисами Upstart. В августе 2006 года Apple повторно запустила launchd с лицензией Apache License версии 2.0, чтобы облегчить адаптацию других разработчиков с открытым исходным кодом[6]. Большинство дистрибутивов Linux используют systemd или Upstart, либо продолжают использовать Init, а BSD-подобные системы также продолжают использовать Init. В декабре 2013 года Р. Тайлер Крой объявил о своем намерении возобновить работу над своей версией launchd для FreeBSD, и его репозиторий «openlaunchd» на Github впоследствии активизировался[7]. В 2014 году, начиная с OS X 10.10 и iOS 8, Apple переместила код для запуска в libxpc с закрытым исходным кодом[8] . В августе 2015 года Джордан Хаббард и Кип Мэйси объявили о запуске NextBSD, который основан на ядре FreeBSD-CURRENT при добавлении в Mach IPC, Libdispatch, notifyd, asld, launchd и других компонентов, полученных из Darwin который состоит из открытого исходного кода для macOS. История релизов launchdСм. такжеСсылки
Примечания
Information related to Launchd |