launchd - launchd

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

launchd - это демон init и управления службами операционной системы , созданный Apple Inc. как часть macOS для замены его BSD-стиля init и SystemStarter. Были предприняты попытки запустить порт на FreeBSD и производные системы.

Содержание
  • 1 Компоненты
    • 1.1 launchd
    • 1.2 launchctl
    • 1.3 Список свойств
  • 2 Протокол активации сокета
  • 3 История
    • 3.1 История выпусков Apple Open Source
  • 4 См. Также
  • 5 Ссылки
  • 6 Внешние ссылки
Компоненты

В системе launchd есть две основные программы: launchd и launchctl.

launchd управляет демонами как на системном, так и на пользовательском уровне. Подобно xinetd, launchd может запускать демонов по запросу. Подобно watchdogd, launchd может контролировать демонов, чтобы убедиться, что они продолжают работать. launchd также заменил init как PID 1 в macOS, и в результате он отвечает за запуск системы во время загрузки.

Файлы конфигурации определяют параметры служб, запускаемых с помощью launchd. Хранящиеся в подкаталогах LaunchAgents и LaunchDaemons папок библиотеки, файлы на основе списка свойств имеют примерно тридцать различных ключей, которые можно задать. Сам launchd не знает об этих файлах конфигурации и не умеет их читать - за это отвечает "launchctl".

launchctl - это приложение командной строки, которое взаимодействует с launchd с помощью IPC и знает, как анализировать файлы списка свойств, используемые для описания заданий launchd, сериализуя их с помощью специального протокола словаря, который понимает launchd. launchctl можно использовать для загрузки и выгрузки демонов, запуска и остановки управляемых заданий по запуску, получения статистики использования системы для launchd и его дочерних процессов, а также для установки параметров среды.

launchd

launchd выполняет две основные задачи. Первый - это загрузка системы, а второй - загрузка и обслуживание сервисов.

Вот упрощенный вид запуска системы Mac OS X Tiger на PowerPC Mac (на Intel Mac EFI заменяет Open Firmware и boot.efiзаменяет BootX ):

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

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

  1. Каталоги LaunchDaemons содержат элементы, которые будут запускаться от имени пользователя root, обычно фоновые процессы.
  2. Каталоги LaunchAgents содержат задания, называемые приложениями-агентами, которые будут запускаться от имени пользователя или в контексте пользовательского пространства. Это могут быть сценарии или другие элементы переднего плана, и они могут даже включать пользовательский интерфейс.

Все эти каталоги хранятся в типичных каталогах библиотеки Mac OS X.

launchd сильно отличается от SystemStarter тем, что он может не запускать все демоны во время загрузки. Ключом к launchd, как и к xinetd, является идея демонов запуска по запросу. Когда launchctl просматривает списки заданий во время загрузки, он запрашивает у launchd резервирование и прослушивание всех портов, запрошенных этими заданиями. Если это указано в списке с помощью ключа «OnDemand», демон фактически не загружен в данный момент. Напротив, launchd будет прослушивать порт, запускать демон, когда это необходимо, и выключать его, когда он больше не нужен. После загрузки демона launchd будет отслеживать его и при необходимости проверять, работает ли он. В этом смысле он похож на сторожевой таймер и разделяет требование сторожевого таймера о том, чтобы процессы не пытались самостоятельно выполнить форк или демонизировать. Если процесс уходит в фоновый режим, launchd потеряет его отслеживание и попытается перезапустить.

Mac OS X Tiger, следовательно, загружается намного быстрее, чем предыдущие выпуски. Система должна только зарегистрировать запускаемые демоны и не запускать их, пока они не понадобятся. Фактически, индикатор выполнения, который появляется во время загрузки, представляет собой просто приложение-плацебо (названное WaitingForLoginWindow), которое на самом деле не показывает ничего, кроме времени.

Самая сложная часть управления во время загрузки при запуске - это зависимости. SystemStarter имел очень простую систему зависимостей, в которой использовались ключи «Использует», «Требует» и «Предоставляет» в списке элементов автозагрузки. Есть две основные стратегии при создании зависимостей launchd на Tiger: IPC позволяет демонам общаться между собой для определения зависимостей, или демоны могут отслеживать файлы или пути на предмет изменений. Использование IPC намного сложнее, чем ключи SystemStarter, и требует от разработчика больше работы, но может привести к более чистому и быстрому запуску. SystemStarter по-прежнему поддерживался до OS X Mountain Lion, но был удален в OS X Yosemite.

launchctl

В launchd управление службами централизовано в Приложение launchctl.

Сам по себе launchctl может принимать команды из командной строки, из стандартного in или работать в интерактивном режиме. С привилегиями суперпользователя , launchctl можно использовать для внесения изменений в глобальном масштабе. Набор команд launchctl можно сделать постоянным, если он хранится в /etc/launchd.conf. (Файл ~ /.launchd.confдля каждого пользователя, по-видимому, рассматривался, но не поддерживается ни в одной из существующих версий macOS.)

launchctl связывается с launchd через Механизм IPC, специфичный для Mach.

Список свойств

A список свойств (plist) - это тип файла, который launchd использует для настройки программы. Когда launchd сканирует папку или задание отправляется с помощью launchctl, он читает файл plist, описывающий, как программа должна запускаться.

Ниже приводится список часто используемых ключей. Все ключи необязательны, если не указано иное. Полный список см. На странице руководства Apple для launchd.plist.

KeyTypeDescription
LabelStringИмя работа. По соглашению, метка задания такая же, как имя файла plist, без расширения.plist. Обязательно .
ПрограммаСтрокаПуть к исполняемому файлу. Полезно для простых запусков. По крайней мере, один из Programили ProgramArgumentsявляется обязательным .
ProgramArgumentsМассив строкМассив строк, представляющий команду UNIX. Первая строка обычно представляет собой путь к исполняемому файлу, тогда как последние строки содержат параметры или параметры. По крайней мере, один из Programили ProgramArgumentsявляется обязательным .
UserNameString. (по умолчанию rootили текущий пользователь)Задание будет запущено от имени данного пользователя, который может (а может и не быть) быть пользователем, отправившим его в launchd.
OnDemand

(устарело с версии 10.5)

Boolean. (по умолчанию ДА)Устарело с версии 10.5 с более мощным параметром KeepAlive. A логический флаг, который определяет, будет ли задание выполняться постоянно или нет.
RunAtLoadBoolean. (по умолчанию NO)A логический флаг, который определяет, запускается ли задача немедленно, когда задание загружено в launchd.
StartOnMountBoolean. (по умолчанию NO)A логический флаг, который определяет, запускается ли задача при монтировании новой файловой системы.
QueueDirectoriesМассив of stringsНаблюдать за каталогом на предмет новых файлов. Каталог должен быть пуст для начала и должен быть возвращен в пустое состояние, прежде чем QueueDirectoriesснова запустит свою задачу.
WatchPathsМассив строкСледите за путём файловой системы на предмет изменений. Может быть файлом или папкой.
StartIntervalIntegerПланирует выполнение задания по повторяющемуся расписанию. Указывает количество секунд ожидания между запусками.
StartCale ndarIntervalСловарь целых чисел. или. Массив словарей целых чиселПланирование заданий. Синтаксис аналогичен cron.
RootDirectoryStringПеред выполнением задание будет помещено в этот каталог с помощью chrooted.
WorkingDirectoryStringПеред выполнением задание будет chdired в этот каталог.

StandardInPath,. StandardOutPath,. StandardErrorPath

StringКлючи для определения файлов для ввода и вывода для запущенного процесса.
LowPriorityIOBooleanСообщает ядру, что эта задача имеет низкий приоритет при выполнении операций ввода-вывода файловой системы.
AbandonProcessGroupBoolean. (по умолчанию - NO)A boolean флаг, который определяет, будут ли подпроцессы, запущенные из задачи, запущенной с помощью launchd, завершаться при завершении задачи. Полезно, когда краткосрочная задача запускает долгоживущая подзадача, но может привести к процессам-зомби.
SessionCreateBoolean. (по умолчанию NO)A boolean флаг, который определяет, будет ли создан сеанс безопасности для задачи и ее подпроцессы.
Протокол активации сокета

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

История

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

- и большинство из этих вещей были заменены, когда launchd был представлен в Mac OS X v10.4 (Тигр).

В 2005 году Р. Тайлер Крой перенес launchd на FreeBSD в рамках проекта Google Summer of Code. Его нельзя было запустить как PID 1 (только инициализацию сеанса), и он обычно не использовался на этой платформе.

В 2006 году Ubuntu дистрибутив Linux рассматривал использование launchd. Вариант был отклонен, поскольку исходный код подпадал под действие лицензии Apple Public Source License, что было описано как «неизбежная проблема с лицензией». Вместо этого Ubuntu разработала и перешла на собственный инструмент управления службами Upstart.

В августе 2006 года Apple перелицензировала launchd под лицензией Apache, версия 2.0, чтобы легче принять другие разработчики с открытым исходным кодом. Большинство дистрибутивов Linux используют systemd или Upstart, или продолжают init, а BSD также продолжают init.

В декабре 2013 года Р. Тайлер Крой объявил о своем намерении возобновить работу над портом launchd на FreeBSD, и его репозиторий на Github "openlaunchd" впоследствии стал активнее.

Последняя Wayback Machine Захват области Mac OS Forge для запуска был произведен в июне 2012 года, а самая последняя версия с открытым исходным кодом от Apple была 842.92.1 в коде для OS X 10.9.5.

В 2014 году с OS X 10.10 и iOS 8 Apple переместила код для запуска в libxpc с закрытым исходным кодом.

В августе 2015 года Джордан Хаббард и Кип Мэйси анонсировали NextBSD, который основан на ядре FreeBSD-CURRENT при добавлении в Mach IPC, Libdispatch, notifyd, asld, launchd и других компонентов, полученных из Дарвина, открытого исходного кода Apple для OS X.

История выпусков Apple с открытым исходным кодом

ВерсияЛицензия Включено в macOS версииВключено Apple Developer Tools версии
launchd 106Лицензия Apple Public Source License
  • Mac OS X 10.4
  • Mac OS X 10.4.1
launchd 106.3Apple Public Source License
  • 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Лицензия Apple Public Source License
  • Mac OS X 10.4.4.x86
  • Mac OS X 10.4.5.x86
launchd 106.13Лицензия Apple Public Source License
  • Mac OS X 10.4.6.ppc
  • Mac OS X 10.4. 6.x86
launchd 106.14Ap Лицензия открытого исходного кода
  • 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.20Apple Public Source License
  • 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Лицензия Apache 2.0
launchd 257Лицензия Apache 2.0
  • 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Лицензия Apache 2.0
  • Mac OS X 10.5.2
launchd 258.12Лицензия Apache 2.0
  • Mac OS X 10.5.3
  • Mac OS X 10.5.4
запуск 258.18лицензия Apache 2.0
  • Mac OS X 10.5.5
запуск 258,19лицензия Apache 2.0
  • Mac OS X 10.5.6
launchd 258.22Лицензия Apache 2.0
  • Mac O SX 10.5.7
launchd 258.25Лицензия Apache 2.0
  • Mac OS X 10.5.8
launchd 328Лицензия Apache 2.0
  • 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Лицензия Apache 2.0
  • Mac OS X 10.6.3
launchd 329.3.1Лицензия Apache 2.0
  • Mac OS X 10.6.4
  • Инструменты разработчика 3.2.5
  • Инструменты разработчика 3.2.6
launchd 329.3.2Лицензия Apache 2.0
  • Mac OS X 10.6.5
launchd 329.3.3Лицензия Apache 2.0
  • Mac OS X 10.6.6
  • Mac OS X 10.6.7
  • Mac OS X 10.6.8
launchd 392.18Лицензия Apache 2.0
  • Mac OS X 10.7
  • Mac OS X 10.7.1
launchd 392.35Apache License 2.0
  • Mac OS X 10.7.2
launchd 392.36Apache License 2.0
  • Mac OS X 10.7.3
launchd 392.38Лицензия Apache 2.0
  • Mac OS X 10.7.4
launchd 392.39Лицензия Apache 2.0
  • Mac OS X 10.7.5
launc hd 442.21Лицензия Apache 2.0
  • Mac OS X 10.8
  • Mac OS X 10.8.1
launchd 442.26.2Лицензия Apache 2.0
  • Mac OS X 10.8.2
  • Mac OS X 10.8.3
  • Mac OS X 10.8.4
  • Mac OS X 10.8.5
запущен 842.1.4Лицензия Apache 2.0
  • OS X 10.9
  • OS X 10.9.1
запущен 842.90.1Apache License 2.0
  • OS X 10.9.2
  • OS X 10.9.3
launchd 842.92.1Лицензия Apache 2.0
  • OS X 10.9.4
  • OS X 10.9.5
См. также
  • Портал бесплатного программного обеспечения с открытым исходным кодом
Ссылки
Внешние ссылки

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

Разработчик Apple на пенсии D ocuments Library:

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

Последняя правка сделана 2021-05-26 14:43:01
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте