Запуск - launchd - Wikipedia

запуск
Оригинальный автор (ы)Дэйв Заржицки
Разработчики)Apple Inc.
изначальный выпуск29 апреля 2005 г.; 15 лет назад (2005-04-29)
Написано вC
Операционная системаmacOS, FreeBSD
ТипВ этом демон
ЛицензияПроприетарное программное обеспечение (ранее APSL и позже Лицензия Apache 2.0 )
Интернет сайтОткрытый исходный код.яблоко.com/ tarballs/ launchd/ Отредактируйте это в Викиданных

запуск является в этом и управление службами операционной системы демон сделано 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 ):

  1. Открытая прошивка активирует, инициализирует оборудование, а затем загружает BootX.
  2. BootX загружает ядро, вращает курсор вертушки и загружает все необходимое расширения ядра (kexts).
  3. Ядро загружается запуском.
  4. запускается / etc / rc, различные скрипты, которые просматривают / Система / Библиотека / LaunchDaemons и / Библиотека / LaunchDaemons, вызывая при необходимости launchctl в списках, затем launchd запускает окно входа в систему.

На шаге 4 сценарии запуска просматривают несколько разных каталогов для выполнения заданий. Сканируются два разных каталога:

  1. Каталоги LaunchDaemons содержат элементы, которые будут запускаться от имени пользователя root, как правило, фоновые процессы.
  2. Каталоги 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 в этот каталог перед выполнением.

StandardInPath,
StandardOutPath,
StandardErrorPath

НитьКлючи для определения файлов для ввода и вывода для запущенного процесса.
LowPriorityIOБулевоСообщает ядру, что эта задача имеет низкий приоритет при выполнении операций ввода-вывода файловой системы.
AbandonProcessGroupБулево
(по умолчанию НЕТ)
А логический флаг, определяющий, будут ли завершены подпроцессы, запущенные из задачи, запущенной с помощью launchd, при завершении задачи. Полезно, когда краткосрочная задача запускает долгоживущую подзадачу, но может привести к зомби процессы.
SessionCreateБулево
(по умолчанию НЕТ)
А логический флаг, определяющий, будет ли создан сеанс безопасности для задачи и ее подпроцессов.

Протокол активации сокета

Имя каждого ключа в разделе Sockets будет помещено в среду задания при его запуске, а файловый дескриптор этого сокета будет доступен в этой переменной среды. Это отличается от активации сокета systemd тем, что имя определения сокета внутри конфигурации задания жестко запрограммировано в приложении. Этот протокол менее гибкий, хотя он не требует, как systemd, от демона жесткого кодирования начального файлового дескриптора (по состоянию на 2014 год - 3).[4]

История

Программное обеспечение было разработано и написано Дэйвом Заржицки в яблоко. Компания планировала заменить все нижеследующее в OS X среды -

- и многое из этого мы заменено, когда 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 с открытым исходным кодом

ВерсияЛицензияВключен в macOS версииВключено Инструменты разработчика Apple версии
launchd 106Лицензия Apple Public Source License[11]
Launchd 106,3Лицензия Apple Public Source License[14]
  • Mac OS X 10.4.2[15]
  • Mac OS X 10.4.3[16]
  • Mac OS X 10.4.4.ppc[17]
  • Mac OS X 10.4.5.ppc[18]
запуск 106.10Лицензия Apple Public Source License[19]
  • Mac OS X 10.4.4.x86[20]
  • Mac OS X 10.4.5.x86[21]
launchd 106,13Лицензия Apple Public Source License[22]
  • Mac OS X 10.4.6.ppc[23]
  • Mac OS X 10.4.6.x86[24]
Launchd 106.14Лицензия Apple Public Source License[25]
  • Mac OS X 10.4.7.ppc[26]
  • Mac OS X 10.4.7.x86[27]
  • Mac OS X 10.4.8.ppc[28]
  • Mac OS X 10.4.9.ppc[29]
  • Mac OS X 10.4.10.ppc[30]
  • Mac OS X 10.4.11.ppc[31]
launchd 106.20Лицензия Apple Public Source License[32]
  • Mac OS X 10.4.8.x86[33]
  • Mac OS X 10.4.9.x86[34]
  • Mac OS X 10.4.10.x86[35]
  • Mac OS X 10.4.11.x86[36]
  • Инструменты разработчика 2.4[37]
launchd 152Лицензия Apache 2.0[38]
launchd 257Лицензия Apache 2.0[39]
  • Инструменты разработчика 3.1[42]
  • Инструменты разработчика 3.1b[43]
  • Инструменты разработчика 3.1.1[44]
  • Инструменты разработчика 3.1.2[45]
  • Инструменты разработчика 3.1.3[46]
  • Инструменты разработчика 3.1.4[47]
launchd 258.1Лицензия Apache 2.0[48]
launchd 258.12Лицензия Apache 2.0[50]
launchd 258.18Лицензия Apache 2.0[53]
launchd 258,19Лицензия Apache 2.0[55]
launchd 258,22Лицензия Apache 2.0[57]
Launchd 258.25Лицензия Apache 2.0[59]
launchd 328Лицензия Apache 2.0[61]
  • Инструменты разработчика 3.2.1[65]
  • Инструменты разработчика 3.2.2[66]
  • Инструменты разработчика 3.2.3[67]
  • Инструменты разработчика 3.2.4[68]
Launchd 329.3Лицензия Apache 2.0[69]
запуск 329.3.1Лицензия Apache 2.0[71]
  • Инструменты разработчика 3.2.5[73]
  • Инструменты разработчика 3.2.6[74]
запуск 329.3.2Лицензия Apache 2.0[75]
запуск 329.3.3Лицензия Apache 2.0[77]
Launchd 392,18Лицензия Apache 2.0[81]
Launchd 392,35Лицензия Apache 2.0[84]
Launchd 392,36Лицензия Apache 2.0[86]
Launchd 392,38Лицензия Apache 2.0[88]
Launchd 392,39Лицензия Apache 2.0[90]
launchd 442.21Лицензия Apache 2.0[92]
запуск 442.26.2Лицензия Apache 2.0[95]
запуск 842.1.4Лицензия Apache 2.0[100]
запуск 842.90.1Лицензия Apache 2.0[103]
запуск 842.92.1Лицензия Apache 2.0[106]

Смотрите также

Рекомендации

  1. ^ «Детали тигра». Дерзкий огненный шар. WaitingForLoginWindow. Получено 23 февраля, 2020.
  2. ^ Страница руководства Mac OS X для launchd.conf (5)
  3. ^ Страница руководства Mac OS X для launchd.plist (5)
  4. ^ маленький-большой-ч. "узел-запуск". Получено 10 апреля, 2014.
  5. ^ "Launchd". FreeBSD вики. Получено 8 декабря, 2013.
  6. ^ "ReplacementInit". UbuntuWiki. Получено 2 июля, 2007.
  7. ^ Прабхакар, Эрнест (7 августа 2006 г.). «Apple открывает: ядро, Mac OS Forge, iCal Server, Bonjour, Launchd». Получено 2 июля, 2007.
  8. ^ Крой, Р. Тайлер. «Самая царапающая шея, или FreeBSD на моем Thinkpad X200». unethicalblogger.com. Получено 8 декабря, 2013.
  9. ^ "launchd". Mac OS Forge. Apple Inc. Архивировано с оригинал 9 июня 2012 г.. Получено 3 сентября, 2016.
  10. ^ Левин, Джонатан (2014). "Launchd - К вашим услугам!" (PDF). п. 32. Получено 3 сентября, 2016. … 10.10: перенесено на libxpc 559 (560 в iOS 8) - Исходный код еще недоступен - и, возможно, никогда не будет - Libxpc - проект с закрытым исходным кодом ...
  11. ^ "файл лицензии launchd 106".
  12. ^ «Mac OS X 10.4 - Исходный код».
  13. ^ «Mac OS X 10.4.1 - Исходный код».
  14. ^ "файл лицензии launchd 106.3".
  15. ^ «Mac OS X 10.4.2 - Исходный код».
  16. ^ «Mac OS X 10.4.3 - Исходный код».
  17. ^ «Mac OS X 10.4.4.ppc - Исходный код».
  18. ^ «Mac OS X 10.4.5.ppc - Исходный код».
  19. ^ "файл лицензии launchd 106.10".
  20. ^ «Mac OS X 10.4.4.x86 - Исходный код».
  21. ^ «Mac OS X 10.4.5.x86 - Исходный код».
  22. ^ "файл лицензии launchd 106.13".
  23. ^ «Mac OS X 10.4.6.ppc - Исходный код».
  24. ^ «Mac OS X 10.4.6.x86 - Исходный код».
  25. ^ "файл лицензии launchd 106.14".
  26. ^ «Mac OS X 10.4.7.ppc - Исходный код».
  27. ^ «Mac OS X 10.4.7.x86 - Исходный код».
  28. ^ «Mac OS X 10.4.8.ppc - Исходный код».
  29. ^ «Mac OS X 10.4.9.ppc - Исходный код».
  30. ^ «Mac OS X 10.4.10.ppc - Исходный код».
  31. ^ «Mac OS X 10.4.11.ppc - Исходный код».
  32. ^ "файл лицензии launchd 106.20".
  33. ^ «Mac OS X 10.4.8.x86 - Исходный код».
  34. ^ «Mac OS X 10.4.9.x86 - Исходный код».
  35. ^ «Mac OS X 10.4.10.x86 - Исходный код».
  36. ^ «Mac OS X 10.4.11.x86 - Исходный код».
  37. ^ «Инструменты разработчика 2.4 - Исходный код».
  38. ^ "файл лицензии launchd 152".
  39. ^ "файл лицензии launchd 257".
  40. ^ «Mac OS X 10.5 - Исходный код».
  41. ^ «Mac OS X 10.5.1 - Исходный код».
  42. ^ «Инструменты разработчика 3.1 - Исходный код».
  43. ^ «Инструменты разработчика 3.1b - Исходный код».
  44. ^ «Инструменты разработчика 3.1.1 - Исходный код».
  45. ^ «Инструменты разработчика 3.1.2 - Исходный код».
  46. ^ «Инструменты разработчика 3.1.3 - Исходный код».
  47. ^ «Инструменты разработчика 3.1.4 - Исходный код».
  48. ^ "файл лицензии launchd 258.1".
  49. ^ «Mac OS X 10.5.2 - Исходный код».
  50. ^ "файл лицензии launchd 258.12".
  51. ^ «Mac OS X 10.5.3 - Исходный код».
  52. ^ «Mac OS X 10.5.4 - Исходный код».
  53. ^ "файл лицензии launchd 258.18".
  54. ^ «Mac OS X 10.5.5 - Исходный код».
  55. ^ "файл лицензии launchd 258.19".
  56. ^ «Mac OS X 10.5.6 - Исходный код».
  57. ^ "файл лицензии launchd 258.22".
  58. ^ «Mac OS X 10.5.7 - Исходный код».
  59. ^ "файл лицензии launchd 258.25".
  60. ^ «Mac OS X 10.5.8 - Исходный код».
  61. ^ "файл лицензии launchd 328".
  62. ^ «Mac OS X 10.6 - Исходный код».
  63. ^ «Mac OS X 10.6.1 - Исходный код».
  64. ^ «Mac OS X 10.6.2 - Исходный код».
  65. ^ «Инструменты разработчика 3.2.1 - Исходный код».
  66. ^ «Инструменты разработчика 3.2.2 - Исходный код».
  67. ^ «Инструменты разработчика 3.2.3 - Исходный код».
  68. ^ «Инструменты разработчика 3.2.4 - Исходный код».
  69. ^ "файл лицензии launchd 329.3".
  70. ^ «Mac OS X 10.6.3 - Исходный код».
  71. ^ "файл лицензии launchd 329.3.1".
  72. ^ «Mac OS X 10.6.4 - Исходный код».
  73. ^ «Инструменты разработчика 3.2.5 - Исходный код».
  74. ^ «Инструменты разработчика 3.2.6 - Исходный код».
  75. ^ "файл лицензии launchd 329.3.2".
  76. ^ «Mac OS X 10.6.5 - Исходный код».
  77. ^ "файл лицензии launchd 329.3.3".
  78. ^ «Mac OS X 10.6.6 - Исходный код».
  79. ^ «Mac OS X 10.6.7 - Исходный код».
  80. ^ «Mac OS X 10.6.8 - Исходный код».
  81. ^ "файл лицензии launchd 392.18".
  82. ^ «Mac OS X 10.7 - Исходный код».
  83. ^ «Mac OS X 10.7.1 - Исходный код».
  84. ^ "файл лицензии launchd 392.35".
  85. ^ «Mac OS X 10.7.2 - Исходный код».
  86. ^ "файл лицензии launchd 392.36".
  87. ^ «Mac OS X 10.7.3 - Исходный код».
  88. ^ "файл лицензии launchd 392.38".
  89. ^ «Mac OS X 10.7.4 - Исходный код».
  90. ^ "файл лицензии launchd 392.39".
  91. ^ «Mac OS X 10.7.5 - Исходный код».
  92. ^ "заголовок лицензии в исходном коде launchd 442.21".
  93. ^ «Mac OS X 10.8 - Исходный код».
  94. ^ «Mac OS X 10.8.1 - Исходный код».
  95. ^ "заголовок лицензии в исходном коде launchd 442.26.2".
  96. ^ «Mac OS X 10.8.2 - Исходный код».
  97. ^ «Mac OS X 10.8.3 - Исходный код».
  98. ^ «Mac OS X 10.8.4 - Исходный код».
  99. ^ «Mac OS X 10.8.5 - Исходный код».
  100. ^ "заголовок лицензии в исходном коде launchd 842.1.4".
  101. ^ «OS X 10.9 - Исходный код».
  102. ^ «OS X 10.9.1 - Исходный код».
  103. ^ "заголовок лицензии в исходном коде launchd 842.90.1".
  104. ^ «OS X 10.9.2 - Исходный код».
  105. ^ «OS X 10.9.3 - Исходный код».
  106. ^ "заголовок лицензии в исходном коде launchd 842.92.1".
  107. ^ «OS X 10.9.4 - Исходный код».
  108. ^ «OS X 10.9.5 - Исходный код».

внешняя ссылка

Разработчик Apple:

Библиотека устаревших документов для разработчиков Apple:

Другие ссылки: