Launchd - Википедия - launchd
Эта статья ведущий раздел может быть слишком коротким и неадекватно подвести итог ключевые моменты его содержания. Пожалуйста, подумайте о расширении интереса до предоставить доступный обзор обо всех важных аспектах статьи. (Июнь 2020 г.) |
Оригинальный автор (ы) | Дэйв Заржицки |
---|---|
Разработчики) | Apple Inc. |
изначальный выпуск | 29 апреля 2005 г. |
Написано в | C |
Операционная система | macOS, FreeBSD |
Тип | В этом демон |
Лицензия | Проприетарное программное обеспечение (ранее APSL и позже Лицензия Apache 2.0 ) |
Интернет сайт | Открытый исходный код |
запуск является в этом и управление службами операционной системы демон сделано Apple Inc. как часть macOS чтобы заменить его стиль BSD в этом и SystemStarter. Были попытки порт запущен в FreeBSD и производные системы.
Составные части
В системе launchd есть две основные программы: launchd и launchctl.
запуск управляет демонами как на системном, так и на пользовательском уровне. Подобно xinetd, launchd может запускать демонов по запросу. Подобно watchdogd, launchd может отслеживать демонов, чтобы убедиться, что они продолжают работать. launchd также заменил init как PID 1 в macOS и, как следствие, отвечает за запуск системы во время загрузки.
Файлы конфигурации определяют параметры служб, запускаемых с помощью launchd. Сохраненные в подкаталогах LaunchAgents и LaunchDaemons папок библиотеки, список недвижимости файлы имеют примерно тридцать различных ключей, которые можно установить. Сам launchd не знает об этих файлах конфигурации и не умеет их читать - за это отвечает «launchctl».
launchctl это приложение командной строки, которое общается с launchd с помощью IPC и знает, как разбирать список недвижимости файлы, используемые для описания запущенных заданий, сериализуя их с помощью специального словарного протокола, который понимает launchd. launchctl можно использовать для загрузки и выгрузки демонов, запуска и остановки управляемых заданий по запуску, получения статистики использования системы для launchd и его дочерних процессов, а также установки параметров среды.
запуск
launchd выполняет две основные задачи. Во-первых, чтобы ботинок система, а второй - для загрузки и обслуживания сервисов.
Вот упрощенный вид запуска системы Mac OS X Tiger на PowerPC Mac (на Intel Mac, EFI заменяет Открытая прошивка и boot.efi
заменяет BootX ):
- Открытая прошивка активирует, инициализирует оборудование, а затем загружает BootX.
- BootX загружает ядро, вращает курсор вертушки и загружает все необходимое расширения ядра (kexts).
- Ядро загружается запуском.
- запускается
/ etc / rc
, различные скрипты, которые просматривают/ Система / Библиотека / LaunchDaemons
и/ Библиотека / LaunchDaemons
, вызывая при необходимости launchctl в списках, затем launchd запускает окно входа в систему.
На шаге 4 сценарии запуска просматривают несколько разных каталогов для выполнения заданий. Сканируются два разных каталога:
- Каталоги LaunchDaemons содержат элементы, которые будут запускаться от имени пользователя root, как правило, фоновые процессы.
- Каталоги LaunchAgents содержат задания, называемые приложениями-агентами, которые будут выполняться от имени пользователя или в контексте пользовательского пространства. Это могут быть сценарии или другие элементы переднего плана, и они могут даже включать пользовательский интерфейс.
Все эти каталоги хранятся в типичных каталогах библиотеки Mac OS X.
launchd сильно отличается от SystemStarter тем, что он может не запускать все демоны во время загрузки. Ключом к launchd, как и к xinetd, является идея демонов запуска по запросу. Когда launchctl просматривает списки заданий во время загрузки, он запрашивает у launchd резервирование и прослушивание всех портов, запрошенных этими заданиями. Если это указано в списке с помощью ключа «OnDemand», демон фактически не загружен в данный момент. Напротив, launchd будет прослушивать порт, запускать демон, когда это необходимо, и выключать его, когда он больше не нужен. После загрузки демона launchd будет отслеживать его и при необходимости проверять, работает ли он. В этом смысле он похож на сторожевой таймер и разделяет требование сторожевого таймера о том, что процессы не пытаются самостоятельно выполнить форк или демонизировать. Если процесс уходит в фоновый режим, launchd потеряет его отслеживание и попытается перезапустить.
Следовательно, Mac OS X Tiger загружается намного быстрее, чем предыдущие выпуски. Система должна только зарегистрировать запускаемые демоны и не запускать их, пока они не понадобятся. Фактически, индикатор выполнения, который появляется во время загрузки, является просто приложением-плацебо (с именем WaitingForLoginWindow[1]), который на самом деле не показывает ничего, кроме течения времени.
Самая сложная часть управления во время загрузки с запуском - это зависимости. SystemStarter имел очень простую систему зависимостей, в которой использовались ключи «Использует», «Требует» и «Предоставляет» в списке элементов автозагрузки. При создании зависимостей launchd на Tiger есть две основные стратегии: МПК позволяет демонам разговаривать между собой для определения зависимостей, или же демоны могут отслеживать файлы или пути на предмет изменений. Использование IPC намного сложнее, чем ключи SystemStarter, и требует от разработчика больше работы, но может[нужна цитата ] привести к более чистому и быстрому запуску. SystemStarter по-прежнему поддерживался до OS X Mountain Lion, но был удален в OS X Йосемити.
launchctl
В launchd управление сервисами централизовано в launchctl
заявление.
Сам по себе launchctl может принимать команды из командной строки, из стандартного in или работать в интерактивном режиме. С суперпользователь привилегий, launchctl можно использовать для внесения изменений в глобальном масштабе. Набор команд launchctl можно сделать постоянным при хранении в /etc/launchd.conf. (На пользователя ~ / .launchd.conf Файл, похоже, был рассмотрен, но не поддерживается ни в одной из существующих версий macOS.[2])
launchctl связывается с launchd через Мах -специфический механизм IPC.
Список недвижимости
А список недвижимости (plist) - это тип файла, который launchd использует для настройки программы. Когда launchd сканирует папку или задание отправляется с помощью launchctl, он читает файл plist, в котором описывается, как запускать программу.
Список часто используемых ключей следует ниже. Все ключи необязательны, если не указано иное. Полный список см. На странице руководства Apple для launchd.plist
.[3]
Ключ | Тип | Описание |
---|---|---|
Этикетка | Нить | Название работы. По соглашению, метка задания такая же, как имя файла plist, без .plist расширение. Необходимый. |
Программа | Нить | Путь к исполняемому файлу. Полезно для простых запусков. По крайней мере, один из Программа или же ПрограммаАргументы является требуется. |
ПрограммаАргументы | Массив строк | Массив строк, представляющий команду UNIX. Первая строка обычно представляет собой путь к исполняемому файлу, тогда как последние строки содержат параметры или параметры. По крайней мере, один из Программа или же ПрограммаАргументы является требуется. |
Имя пользователя | Нить (по умолчанию корень или текущий пользователь) | Задание будет запущено от имени данного пользователя, который может (а может и не быть) быть пользователем, отправившим его в launchd. |
По запросу, по требованию (Не рекомендуется с 10.5) | Булево (по умолчанию ДА ) | Устарело с версии 10.5 с более мощным KeepAlive вариант. А логический флаг, определяющий, выполняется задание непрерывно или нет. |
RunAtLoad | Булево (по умолчанию НЕТ ) | А логический флаг, который определяет, запускается ли задача сразу после загрузки задания в launchd. |
StartOnMount | Булево (по умолчанию НЕТ ) | А логический флаг, определяющий, запускается ли задача при монтировании новой файловой системы. |
QueueDirectories | Массив строк | Следите за каталогом на наличие новых файлов. Каталог должен быть пустым для начала и должен быть возвращен в пустое состояние перед QueueDirectories снова запустит свою задачу. |
WatchPaths | Массив строк | Следите за изменениями в пути к файловой системе. Может быть файлом или папкой. |
StartInterval | Целое число | Планирует выполнение задания по повторяющемуся расписанию. Указывает количество секунд ожидания между запусками. |
StartCalendarInterval | Словарь целых чисел или же Массив словарей целых чисел | Планирование работы. В синтаксис похоже на cron. |
Корневая директория | Нить | Работа будет хромированный в этот каталог перед выполнением. |
WorkingDirectory | Нить | Работа будет chdired в этот каталог перед выполнением. |
| Нить | Ключи для определения файлов для ввода и вывода для запущенного процесса. |
LowPriorityIO | Булево | Сообщает ядру, что эта задача имеет низкий приоритет при выполнении операций ввода-вывода файловой системы. |
AbandonProcessGroup | Булево (по умолчанию НЕТ ) | А логический флаг, определяющий, будут ли завершены подпроцессы, запущенные из задачи, запущенной с помощью launchd, при завершении задачи. Полезно, когда краткосрочная задача запускает долгоживущую подзадачу, но может привести к зомби процессы. |
SessionCreate | Булево (по умолчанию НЕТ ) | А логический флаг, определяющий, будет ли создан сеанс безопасности для задачи и ее подпроцессов. |
Протокол активации сокета
Имя каждого ключа в разделе Sockets будет помещено в среду задания при его запуске, а файловый дескриптор этого сокета будет доступен в этой переменной среды. Это отличается от активации сокета systemd тем, что имя определения сокета внутри конфигурации задания жестко запрограммировано в приложении. Этот протокол менее гибкий, хотя он не требует, как systemd, от демона жесткого кодирования начального файлового дескриптора (по состоянию на 2014 год - 3).[4]
История
Программное обеспечение было разработано и написано Дэйвом Заржицки в яблоко. Компания планировала заменить все нижеследующее в OS X среды -
- в этом
- rc
- init.d сценарий
- rc.d сценарий
- SystemStarter
- inetd / xinetd
- crond / atd
- сторожевой пес
- и многое из этого мы заменено, когда launchd был представлен с Mac OS X v10.4 (Тигр).
В 2005 году Р. Тайлер Крой перенес запуск на FreeBSD в рамках проекта Google Summer of Code. Его нельзя было запустить как PID 1 (только инициализацию сеанса), и на этой платформе он обычно не использовался.[5]
В 2006 г. Ubuntu Дистрибутив Linux рассматривал использование launchd. Вариант был отклонен, поскольку исходный код подпадал под Лицензия Apple Public Source License - описывается как «неизбежная проблема с лицензией».[6] Вместо этого Ubuntu разработала и перешла на собственный инструмент управления сервисами, Выскочка.
В августе 2006 года Apple перелицензированный запущен под Лицензия Apache, версия 2.0 чтобы упростить внедрение другими разработчиками с открытым исходным кодом.[7] Большинство дистрибутивов Linux используют systemd или же Выскочка, или продолжить с в этом, а BSD также продолжайте с init.
В декабре 2013 года Р. Тайлер Крой объявил о своем намерении возобновить работу над портом launchd на FreeBSD, и его репозиторий «openlaunchd» на Github впоследствии стал активнее.[8]
Последний запуск Wayback Machine в области кузницы Mac OS был в июне 2012 года.[9] и самая последняя версия с открытым исходным кодом от Apple была 842.92.1 в коде для OS X 10.9.5.
В 2014 году с OS X 10.10 и iOS 8 Apple переместила код для launchd в libxpc с закрытым исходным кодом.[10]
В августе 2015 года Джордан Хаббард и Кип Мэйси объявили NextBSD, который основан на ядре FreeBSD-CURRENT при добавлении в Mach IPC, Libdispatch, notifyd, asld, launchd и других компонентов, полученных из Darwin, открытого исходного кода Apple для OS X.
История выпусков Apple с открытым исходным кодом
Смотрите также
- systemd: аналогичная утилита, разработанная Красная шляпа для использования в различных основных дистрибутивах Linux
- Средство управления услугами
- Супер-сервер
- TCP-оболочка
- Управление службами операционной системы
Рекомендации
- ^ «Детали тигра». Дерзкий огненный шар. WaitingForLoginWindow. Получено 23 февраля, 2020.
- ^ Страница руководства Mac OS X для launchd.conf (5)
- ^ Страница руководства Mac OS X для launchd.plist (5)
- ^ маленький-большой-ч. "узел-запуск". Получено 10 апреля, 2014.
- ^ "Launchd". FreeBSD вики. Получено 8 декабря, 2013.
- ^ "ReplacementInit". UbuntuWiki. Получено 2 июля, 2007.
- ^ Прабхакар, Эрнест (7 августа 2006 г.). «Apple открывает: ядро, Mac OS Forge, iCal Server, Bonjour, Launchd». Получено 2 июля, 2007.
- ^ Крой, Р. Тайлер. «Самая царапающая шея, или FreeBSD на моем Thinkpad X200». unethicalblogger.com. Получено 8 декабря, 2013.
- ^ "launchd". Mac OS Forge. Apple Inc. Архивировано с оригинал 9 июня 2012 г.. Получено 3 сентября, 2016.
- ^ Левин, Джонатан (2014). "Launchd - К вашим услугам!" (PDF). п. 32. Получено 3 сентября, 2016.
… 10.10: перенесено на libxpc 559 (560 в iOS 8) - Исходный код еще недоступен - и, возможно, никогда не будет - Libxpc - проект с закрытым исходным кодом ...
- ^ "файл лицензии launchd 106".
- ^ «Mac OS X 10.4 - Исходный код».
- ^ «Mac OS X 10.4.1 - Исходный код».
- ^ "файл лицензии launchd 106.3".
- ^ «Mac OS X 10.4.2 - Исходный код».
- ^ «Mac OS X 10.4.3 - Исходный код».
- ^ «Mac OS X 10.4.4.ppc - Исходный код».
- ^ «Mac OS X 10.4.5.ppc - Исходный код».
- ^ "файл лицензии launchd 106.10".
- ^ «Mac OS X 10.4.4.x86 - Исходный код».
- ^ «Mac OS X 10.4.5.x86 - Исходный код».
- ^ "файл лицензии launchd 106.13".
- ^ «Mac OS X 10.4.6.ppc - Исходный код».
- ^ «Mac OS X 10.4.6.x86 - Исходный код».
- ^ "файл лицензии launchd 106.14".
- ^ «Mac OS X 10.4.7.ppc - Исходный код».
- ^ «Mac OS X 10.4.7.x86 - Исходный код».
- ^ «Mac OS X 10.4.8.ppc - Исходный код».
- ^ «Mac OS X 10.4.9.ppc - Исходный код».
- ^ «Mac OS X 10.4.10.ppc - Исходный код».
- ^ «Mac OS X 10.4.11.ppc - Исходный код».
- ^ "файл лицензии launchd 106.20".
- ^ «Mac OS X 10.4.8.x86 - Исходный код».
- ^ «Mac OS X 10.4.9.x86 - Исходный код».
- ^ «Mac OS X 10.4.10.x86 - Исходный код».
- ^ «Mac OS X 10.4.11.x86 - Исходный код».
- ^ «Инструменты разработчика 2.4 - Исходный код».
- ^ "файл лицензии launchd 152".
- ^ "файл лицензии launchd 257".
- ^ «Mac OS X 10.5 - Исходный код».
- ^ «Mac OS X 10.5.1 - Исходный код».
- ^ «Инструменты разработчика 3.1 - Исходный код».
- ^ «Инструменты разработчика 3.1b - Исходный код».
- ^ «Инструменты разработчика 3.1.1 - Исходный код».
- ^ «Инструменты разработчика 3.1.2 - Исходный код».
- ^ «Инструменты разработчика 3.1.3 - Исходный код».
- ^ «Инструменты разработчика 3.1.4 - Исходный код».
- ^ "файл лицензии launchd 258.1".
- ^ «Mac OS X 10.5.2 - Исходный код».
- ^ "файл лицензии launchd 258.12".
- ^ «Mac OS X 10.5.3 - Исходный код».
- ^ «Mac OS X 10.5.4 - Исходный код».
- ^ "файл лицензии launchd 258.18".
- ^ «Mac OS X 10.5.5 - Исходный код».
- ^ "файл лицензии launchd 258.19".
- ^ «Mac OS X 10.5.6 - Исходный код».
- ^ "файл лицензии launchd 258.22".
- ^ «Mac OS X 10.5.7 - Исходный код».
- ^ "файл лицензии launchd 258.25".
- ^ «Mac OS X 10.5.8 - Исходный код».
- ^ "файл лицензии launchd 328".
- ^ «Mac OS X 10.6 - Исходный код».
- ^ «Mac OS X 10.6.1 - Исходный код».
- ^ «Mac OS X 10.6.2 - Исходный код».
- ^ «Инструменты разработчика 3.2.1 - Исходный код».
- ^ «Инструменты разработчика 3.2.2 - Исходный код».
- ^ «Инструменты разработчика 3.2.3 - Исходный код».
- ^ «Инструменты разработчика 3.2.4 - Исходный код».
- ^ "файл лицензии launchd 329.3".
- ^ «Mac OS X 10.6.3 - Исходный код».
- ^ "файл лицензии launchd 329.3.1".
- ^ «Mac OS X 10.6.4 - Исходный код».
- ^ «Инструменты разработчика 3.2.5 - Исходный код».
- ^ «Инструменты разработчика 3.2.6 - Исходный код».
- ^ "файл лицензии launchd 329.3.2".
- ^ «Mac OS X 10.6.5 - Исходный код».
- ^ "файл лицензии launchd 329.3.3".
- ^ «Mac OS X 10.6.6 - Исходный код».
- ^ «Mac OS X 10.6.7 - Исходный код».
- ^ «Mac OS X 10.6.8 - Исходный код».
- ^ "файл лицензии launchd 392.18".
- ^ «Mac OS X 10.7 - Исходный код».
- ^ «Mac OS X 10.7.1 - Исходный код».
- ^ "файл лицензии launchd 392.35".
- ^ «Mac OS X 10.7.2 - Исходный код».
- ^ "файл лицензии launchd 392.36".
- ^ «Mac OS X 10.7.3 - Исходный код».
- ^ "файл лицензии launchd 392.38".
- ^ «Mac OS X 10.7.4 - Исходный код».
- ^ "файл лицензии launchd 392.39".
- ^ «Mac OS X 10.7.5 - Исходный код».
- ^ "заголовок лицензии в исходном коде launchd 442.21".
- ^ «Mac OS X 10.8 - Исходный код».
- ^ «Mac OS X 10.8.1 - Исходный код».
- ^ "заголовок лицензии в исходном коде launchd 442.26.2".
- ^ «Mac OS X 10.8.2 - Исходный код».
- ^ «Mac OS X 10.8.3 - Исходный код».
- ^ «Mac OS X 10.8.4 - Исходный код».
- ^ «Mac OS X 10.8.5 - Исходный код».
- ^ "заголовок лицензии в исходном коде launchd 842.1.4".
- ^ «OS X 10.9 - Исходный код».
- ^ «OS X 10.9.1 - Исходный код».
- ^ "заголовок лицензии в исходном коде launchd 842.90.1".
- ^ «OS X 10.9.2 - Исходный код».
- ^ «OS X 10.9.3 - Исходный код».
- ^ "заголовок лицензии в исходном коде launchd 842.92.1".
- ^ «OS X 10.9.4 - Исходный код».
- ^ «OS X 10.9.5 - Исходный код».
внешняя ссылка
Разработчик Apple:
- Библиотека разработчика Mac: Руководство по программированию демонов и служб: Создание демонов запуска и агентов
- Библиотека разработчика Mac: Техническое примечание TN2083: Демоны и агенты
Библиотека устаревших документов для разработчиков Apple:
- Дарвин и macOS Системный менеджер Руководство : Общесистемный демон и менеджер агента для каждого пользователя -
- Дарвин и macOS Форматы файлов Руководство –
- Дарвин и macOS Форматы файлов Руководство –
- Дарвин и macOS Общие команды Руководство –
Другие ссылки:
- Библиотека разработчика Apple: Начало работы с launchd на Wayback Machine (архивировано 4 июля 2007 г.)
- Launchd: одна программа, которая правит всеми - YouTube - презентация Дэйва Заржицки, загруженная 8 октября 2007 г. GoogleTechTalks
- вики
.freebsd .org / launchd - разработчик
.яблоко .com /библиотека /архив /документация /Mac OS X / Концептуальный / BPSystemStartup /