Spuštění - launchd - Wikipedia
![]() | Tento článek je hlavní část může být příliš krátký a nedostatečně shrnout klíčové body jeho obsahu. Zvažte prosím rozšíření potenciálního zákazníka na poskytnout přístupný přehled všech důležitých aspektů článku. (Červen 2020) |
Původní autoři | Dave Zarzycki |
---|---|
Vývojáři | Apple Inc. |
První vydání | 29.dubna 2005 |
Napsáno | C |
Operační systém | Operační Systém Mac, FreeBSD |
Typ | Init démon |
Licence | Proprietární software (dříve APSL a později Licence Apache 2.0 ) |
webová stránka | opensource![]() |
spuštění je inic a správa služeb operačního systému démon vytvořil Apple Inc. jako část Operační Systém Mac nahradit jeho styl BSD inic a SystemStarter. Bylo vynaloženo úsilí na přístav spuštěno do FreeBSD a odvozené systémy.
Součásti
V systému launchd existují dva hlavní programy: launchd a launchctl.
spuštění spravuje démony na systémové i uživatelské úrovni. Podobně jako xinetd, launchd může spustit démony na vyžádání. Podobně jako watchdogd může launchd monitorovat démony, aby se ujistil, že běží dál. launchd také nahradil init jako PID 1 v systému macOS a jako výsledek je zodpovědný za spuštění systému při spuštění.
Konfigurační soubory definují parametry služeb spuštěných launchd. Uloženy v podadresářích LaunchAgents a LaunchDaemons složek Library, seznam vlastností -založené soubory mají přibližně třicet různých klíčů, které lze nastavit. launchd sám o těchto konfiguračních souborech nemá žádné znalosti ani žádnou schopnost je číst - to je odpovědností „launchctl“.
launchctl je aplikace příkazového řádku, která mluví k launchd pomocí IPC a ví, jak analyzovat seznam vlastností soubory používané k popisu spouštěcích úloh a jejich serializace pomocí specializovaného slovníkového protokolu, kterému launchd rozumí. launchctl lze použít k načtení a uvolnění démonů, spuštění a zastavení spouštěných úloh, získání statistik využití systému pro launchd a jeho podřízených procesů a nastavení prostředí.
spuštění
launchd má dva hlavní úkoly. První je boot systému a druhým je načítání a údržba služeb.
Zde je zjednodušený pohled na spuštění systému Mac OS X Tiger na a PowerPC Mac (na Intel Mac, EFI nahrazuje Otevřete firmware a boot.efi
nahrazuje BootX ):
- Otevřete firmware aktivuje, inicializuje hardware a poté načte BootX.
- BootX načte jádro, roztočí kurzor větrníku a načte vše potřebné rozšíření jádra (kexts).
- Jádro načte launchd.
- launchd běží
/ etc / rc
, různé skripty, které procházejí/ System / Library / LaunchDaemons
a/ Library / LaunchDaemons
, voláním launchctl na plists podle potřeby, pak launchd spustí přihlašovací okno.
V kroku 4 spouštěcí skripty prohledávají několik různých adresářů pro spuštění úloh. Jsou skenovány dva různé adresáře:
- Adresáře LaunchDaemons obsahují položky, které budou spuštěny jako root, obecně procesy na pozadí.
- Adresáře LaunchAgents obsahují úlohy nazývané aplikace agentů, které budou spuštěny jako uživatel nebo v kontextu uživatelské země. Mohou to být skripty nebo jiné položky v popředí a mohou dokonce zahrnovat uživatelské rozhraní.
Všechny tyto adresáře jsou uloženy v typických knihovních adresářích systému Mac OS X.
launchd se velmi liší od SystemStarter v tom, že nemusí ve skutečnosti spustit všechny démony v době bootování. Klíčem k launchd a podobně jako xinetd je myšlenka démonů launch-on-demand. Když launchctl prohledává seznamy úloh v době spuštění, požádá launchd o rezervaci a naslouchání na všech portech požadovaných těmito úlohami. Pokud je to v plistu označeno klíčem „OnDemand“, démon se aktuálně nenačte. Místo toho launchd naslouchá na portu, v případě potřeby spustí démona a vypne jej, když již není potřeba. Po načtení démona jej launchd bude sledovat a v případě potřeby se ujistit, že běží. Tímto způsobem je to jako watchdogd a sdílí požadavek watchdogd, aby se procesy samy nepokoušely rozvětvovat nebo daemonizovat. Pokud proces přejde na pozadí, launchd ho ztratí a pokusí se jej znovu spustit.
Mac OS X Tiger se tedy spouští mnohem rychleji než předchozí vydání. Systém musí zaregistrovat pouze démony, které mají běžet, a ve skutečnosti je nespustí, dokud nejsou potřeba. Ve skutečnosti je indikátor průběhu, který se zobrazí během zavádění, pouze aplikací placeba (s názvem WaitingForLoginWindow[1]), který ve skutečnosti neukazuje nic jiného než plynutí času.
Nejtěžší částí, kterou lze během spouštění spustit, jsou závislosti. SystemStarter měl velmi jednoduchý systém závislostí, který používal klíče "Používá", "Vyžaduje" a "Poskytuje" v seznamu spouštěcích položek. Při vytváření závislostí spuštění na Tigerovi existují dvě hlavní strategie: IPC umožňuje démonům mluvit mezi sebou, aby zjistili závislosti, nebo démoni mohou sledovat změny souborů nebo cest. Použití IPC je mnohem jemnější než klíče SystemStarter a vyžaduje více práce od vývojáře, ale může[Citace je zapotřebí ] vést k čistšímu a rychlejšímu spuštění. SystemStarter byl stále podporován až do OS X Mountain Lion, ale byl odstraněn v OS X Yosemite.
launchctl
V launchd je ovládání služeb centralizováno v launchctl
aplikace.
Launchctl může sám o sobě brát příkazy z příkazového řádku, ze standardního režimu nebo pracovat v interaktivním režimu. S superuživatel oprávnění, launchctl lze použít k provedení změn v globálním měřítku. Sada příkazů launchctl může být při uložení uložena jako trvalá /etc/launchd.conf. (Na uživatele ~ / .launchd.conf Zdá se, že soubor byl považován, ale není podporován v žádné existující verzi systému macOS.[2])
launchctl komunikuje s launchd přes a Mach - specifický mechanismus IPC.
Seznam nemovitostí
A seznam vlastností (plist) je typ souboru, který launchd používá pro konfiguraci programu. Když launchd prohledá složku nebo je úloha odeslána pomocí launchctl, přečte soubor plist, který popisuje, jak má být program spuštěn.
Následuje seznam často používaných kláves. Všechny klíče jsou volitelné, pokud není uvedeno jinak. Celý seznam najdete na stránce Apple pro launchd.plist
.[3]
Klíč | Typ | Popis |
---|---|---|
Označení | Tětiva | Název úlohy. Podle konvence je štítek úlohy stejný jako název souboru plist, bez znaku .plist rozšíření. Požadované. |
Program | Tětiva | Cesta k spustitelnému souboru. Užitečné pro jednoduché spuštění. Alespoň jeden z Program nebo ProgramArgumenty je Požadované. |
ProgramArgumenty | Pole řetězců | Pole řetězců představujících příkaz UNIX. První řetězec je obvykle cesta k spustitelnému souboru, zatímco druhý řetězec obsahuje možnosti nebo parametry. Alespoň jeden z Program nebo ProgramArgumenty je Požadované. |
Uživatelské jméno | Tětiva (výchozí nastavení vykořenit nebo aktuální uživatel) | Úloha bude spuštěna jako daný uživatel, kterým může (ale nemusí) být uživatel, který ji odeslal ke spuštění. |
Na požádání (Zastaralé od 10.5) | Booleovský (výchozí nastavení ANO ) | Zastaralé od 10.5 s výkonnějšími Udržet naživu volba. A booleovský příznak, který definuje, zda úloha běží nepřetržitě nebo ne. |
RunAtLoad | Booleovský (výchozí nastavení NE ) | A booleovský příznak, který definuje, zda je úkol spuštěn okamžitě po načtení úlohy do launchd. |
StartOnMount | Booleovský (výchozí nastavení NE ) | A booleovský příznak, který definuje, zda je spuštěna úloha při připojení nového souborového systému. |
QueueDirectories | Pole řetězců | Sledujte nové soubory v adresáři. Adresář musí být nejprve prázdný a předtím musí být vrácen do prázdného stavu QueueDirectories znovu zahájí svůj úkol. |
WatchPaths | Pole řetězců | Sledujte změny v souborovém systému. Může to být soubor nebo složka. |
StartInterval | Celé číslo | Naplánuje spuštění úlohy podle opakujícího se plánu. Udává počet sekund čekání mezi běhy. |
StartCalendarInterval | Slovník celých čísel nebo Pole slovníků celých čísel | Plánování úloh. The syntax je podobný cron. |
Kořenový adresář | Tětiva | Práce bude vykrojený do tohoto adresáře před provedením. |
WorkingDirectory | Tětiva | Práce bude chdired do tohoto adresáře před spuštěním. |
| Tětiva | Klávesy k určení souborů pro vstup a výstup pro spuštěný proces. |
LowPriorityIO | Booleovský | Říká jádru, že tento úkol má nízkou prioritu při provádění I / O souborového systému. |
AbandonProcessGroup | Booleovský (výchozí nastavení NE ) | A booleovský příznak, který definuje, zda podprocesy spuštěné z úkolu spuštěného programem launchd budou po skončení úkolu zabity. Užitečné tam, kde krátkodobý úkol spustí dílčí úkol s dlouhým poločasem, ale může mít za následek zombie procesy. |
SessionCreate | Booleovský (výchozí nastavení NE ) | A booleovský příznak, který definuje, zda bude pro úlohu a její podprocesy vytvořena relace zabezpečení. |
Protokol aktivace zásuvky
Název každého klíče v části Sockets bude při spuštění umístěn do prostředí úlohy a deskriptor souboru této zásuvky bude k dispozici v dané proměnné prostředí. To se liší od aktivace soketu systemd v tom, že název definice soketu uvnitř konfigurace úlohy je pevně zakódován do aplikace. Tento protokol je méně flexibilní, i když nevyžaduje, jak to dělá systemd, aby démon napevno zakódoval počáteční deskriptor souboru (od roku 2014 je to 3).[4]
Dějiny
Software navrhl a kódoval Dave Zarzycki v Jablko. Společnost plánovala, že budou nahrazeny všechny následující položky OS X prostředí -
- inic
- rc
- init.d skript
- rc.d skript
- SystemStarter
- inetd / xinetd
- crond / atd
- hlídací pes
- a většina z těch věcí byly nahrazeno, když byl launchd představen s Mac OS X v10.4 (Tygr).
V roce 2005 R. Tyler Croy přenesl launchd do FreeBSD jako součást projektu Google Summer of Code. Nelze jej spustit jako PID 1 (pouze relace init) a na této platformě se běžně nepoužívá.[5]
V roce 2006 Ubuntu Linuxová distribuce zváženo použití launchd. Tato možnost byla odmítnuta, protože zdrojový kód podléhal Licence Apple Public Source - popsáno jako „problém nevyhnutelné licence“.[6] Ubuntu místo toho vyvinul a přešel na svůj vlastní nástroj pro správu služeb, Povýšenec.
V srpnu 2006 společnost Apple znovu licencovaný spuštěno pod Licence Apache, verze 2.0 ve snaze usnadnit přijetí jinými vývojáři open source.[7] Většina linuxových distribucí používá systemd nebo Povýšenec, nebo pokračujte s inic a BSD také pokračujte s init.
V prosinci 2013 R. Tyler Croy oznámil svůj záměr pokračovat v práci na svém přístavu launchd na FreeBSD a jeho „openlaunchd“ Github repo následně vzrostlo v aktivitě.[8]
Poslední zachycení Wayback Machine v oblasti Mac OS Forge pro spuštění bylo v červnu 2012,[9] a nejnovější verze open source od společnosti Apple byla 842.92.1 v kódu pro OS X 10.9.5.
V roce 2014 Apple s OS X 10.10 a iOS 8 přesunul kód pro spuštění do uzavřeného zdroje libxpc.[10]
V srpnu 2015 oznámili Jordan Hubbard a Kip Macy DalšíBSD, který je založen na jádru FreeBSD-CURRENT a přidává do Mach IPC, Libdispatch, notifyd, asld, launchd a dalších komponent odvozených od Darwinu, open-source kódu Apple pro OS X.
Historie vydání Apple Open Source
Viz také
- systemd: podobný nástroj vyvinutý společností červená čepice pro použití mezi různými hlavními distribucemi Linuxu
- Správa služeb
- Super-server
- Obálka TCP
- Správa služeb operačního systému
Reference
- ^ "Detaily tygra". Odvážná ohnivá koule. WaitingForLoginWindow. Citováno 23. února 2020.
- ^ Ruční stránka pro Mac OS X Pro launchd.conf (5)
- ^ Ruční stránka pro Mac OS X Pro launchd.plist (5)
- ^ malý-velký-h. "node-launchd". Citováno 10. dubna 2014.
- ^ "Spustit". FreeBSD wiki. Citováno 8. prosince 2013.
- ^ „ReplacementInit“. UbuntuWiki. Citováno 2. července 2007.
- ^ Prabhakar, Ernest (7. srpna 2006). „Apple se otevírá: jádro, Mac OS Forge, iCal Server, Bonjour, Launchd“. Citováno 2. července 2007.
- ^ Croy, R Tyler. „Nejškrábanější krk na bradě neboli FreeBSD na mém Thinkpadu X200“. unethicalblogger.com. Citováno 8. prosince 2013.
- ^ "launchd". Mac OS Forge. Apple Inc. Archivováno od originál 9. června 2012. Citováno 3. září 2016.
- ^ Levin, Jonathan (2014). „Launchd - k vašim službám!“ (PDF). p. 32. Citováno 3. září 2016.
… 10.10: přesunuto na libxpc 559 (560 v iOS 8) - Zdroj zatím není k dispozici - a možná nikdy nebude - Libxpc je projekt s uzavřeným zdrojem ...
- ^ "launchd 106 licenční soubor".
- ^ „Mac OS X 10.4 - zdroj“.
- ^ „Mac OS X 10.4.1 - zdroj“.
- ^ "launchd 106.3 licenční soubor".
- ^ „Mac OS X 10.4.2 - zdroj“.
- ^ „Mac OS X 10.4.3 - zdroj“.
- ^ „Mac OS X 10.4.4.ppc - zdroj“.
- ^ „Mac OS X 10.4.5.ppc - zdroj“.
- ^ "launchd 106.10 licenční soubor".
- ^ „Mac OS X 10.4.4.x86 - zdroj“.
- ^ „Mac OS X 10.4.5.x86 - zdroj“.
- ^ "launchd 106.13 licenční soubor".
- ^ „Mac OS X 10.4.6.ppc - zdroj“.
- ^ „Mac OS X 10.4.6.x86 - zdroj“.
- ^ "launchd 106.14 licenční soubor".
- ^ „Mac OS X 10.4.7.ppc - zdroj“.
- ^ „Mac OS X 10.4.7.x86 - zdroj“.
- ^ „Mac OS X 10.4.8.ppc - zdroj“.
- ^ „Mac OS X 10.4.9.ppc - zdroj“.
- ^ „Mac OS X 10.4.10.ppc - zdroj“.
- ^ „Mac OS X 10.4.11.ppc - zdroj“.
- ^ „launchd 106.20 licenční soubor“.
- ^ „Mac OS X 10.4.8.x86 - zdroj“.
- ^ „Mac OS X 10.4.9.x86 - zdroj“.
- ^ „Mac OS X 10.4.10.x86 - zdroj“.
- ^ „Mac OS X 10.4.11.x86 - zdroj“.
- ^ „Nástroje pro vývojáře 2.4 - Zdroj“.
- ^ "launchd 152 licenční soubor".
- ^ "launchd 257 licenční soubor".
- ^ „Mac OS X 10.5 - zdroj“.
- ^ „Mac OS X 10.5.1 - zdroj“.
- ^ „Nástroje pro vývojáře 3.1 - Zdroj“.
- ^ „Vývojářské nástroje 3.1b - zdroj“.
- ^ „Vývojářské nástroje 3.1.1 - zdroj“.
- ^ „Vývojářské nástroje 3.1.2 - zdroj“.
- ^ „Vývojářské nástroje 3.1.3 - zdroj“.
- ^ „Vývojářské nástroje 3.1.4 - zdroj“.
- ^ "launchd 258.1 licenční soubor".
- ^ „Mac OS X 10.5.2 - zdroj“.
- ^ "launchd 258.12 licenční soubor".
- ^ „Mac OS X 10.5.3 - zdroj“.
- ^ „Mac OS X 10.5.4 - zdroj“.
- ^ „launchd 258.18 licenční soubor“.
- ^ „Mac OS X 10.5.5 - zdroj“.
- ^ „launchd 258.19 licenční soubor“.
- ^ „Mac OS X 10.5.6 - Zdroj“.
- ^ „launchd 258.22 licenční soubor“.
- ^ „Mac OS X 10.5.7 - zdroj“.
- ^ „launchd 258.25 licenční soubor“.
- ^ „Mac OS X 10.5.8 - Zdroj“.
- ^ "launchd 328 licenční soubor".
- ^ „Mac OS X 10.6 - Zdroj“.
- ^ „Mac OS X 10.6.1 - zdroj“.
- ^ „Mac OS X 10.6.2 - zdroj“.
- ^ „Nástroje pro vývojáře 3.2.1 - Zdroj“.
- ^ „Nástroje pro vývojáře 3.2.2 - Zdroj“.
- ^ „Nástroje pro vývojáře 3.2.3 - Zdroj“.
- ^ „Nástroje pro vývojáře 3.2.4 - Zdroj“.
- ^ "launchd 329.3 licenční soubor".
- ^ „Mac OS X 10.6.3 - zdroj“.
- ^ "launchd 329.3.1 licenční soubor".
- ^ „Mac OS X 10.6.4 - zdroj“.
- ^ „Nástroje pro vývojáře 3.2.5 - Zdroj“.
- ^ „Nástroje pro vývojáře 3.2.6 - Zdroj“.
- ^ "launchd 329.3.2 licenční soubor".
- ^ „Mac OS X 10.6.5 - zdroj“.
- ^ „launchd 329.3.3 licenční soubor“.
- ^ „Mac OS X 10.6.6 - zdroj“.
- ^ „Mac OS X 10.6.7 - zdroj“.
- ^ „Mac OS X 10.6.8 - zdroj“.
- ^ „launchd 392.18 licenční soubor“.
- ^ „Mac OS X 10.7 - Zdroj“.
- ^ „Mac OS X 10.7.1 - zdroj“.
- ^ „launchd 392.35 licenční soubor“.
- ^ „Mac OS X 10.7.2 - zdroj“.
- ^ „launchd 392.36 licenční soubor“.
- ^ „Mac OS X 10.7.3 - zdroj“.
- ^ „launchd 392.38 licenční soubor“.
- ^ „Mac OS X 10.7.4 - zdroj“.
- ^ „launchd 392.39 licenční soubor“.
- ^ „Mac OS X 10.7.5 - zdroj“.
- ^ "záhlaví licence ve zdrojovém kódu launchd 442.21".
- ^ „Mac OS X 10.8 - Zdroj“.
- ^ „Mac OS X 10.8.1 - zdroj“.
- ^ "záhlaví licence ve zdrojovém kódu launchd 442.26.2".
- ^ „Mac OS X 10.8.2 - zdroj“.
- ^ „Mac OS X 10.8.3 - zdroj“.
- ^ „Mac OS X 10.8.4 - zdroj“.
- ^ „Mac OS X 10.8.5 - zdroj“.
- ^ "záhlaví licence ve zdrojovém kódu launchd 842.1.4".
- ^ „OS X 10.9 - Zdroj“.
- ^ „OS X 10.9.1 - zdroj“.
- ^ "záhlaví licence ve zdrojovém kódu launchd 842.90.1".
- ^ „OS X 10.9.2 - zdroj“.
- ^ „OS X 10.9.3 - zdroj“.
- ^ "záhlaví licence ve zdrojovém kódu launchd 842.92.1".
- ^ „OS X 10.9.4 - zdroj“.
- ^ „OS X 10.9.5 - zdroj“.
externí odkazy
Vývojář Apple:
- Knihovna vývojářů pro Mac: Programovací příručka Daemons and Services: Vytváření spouštěcích démonů a agentů
- Knihovna vývojářů pro Mac: Technická poznámka TN2083: Démoni a agenti
Knihovna dokumentů pro důchodce Apple Developer:
- Darwine a Operační Systém Mac Správce systému Manuál : Démon pro celý systém a správce agentů podle uživatelů -
- Darwine a Operační Systém Mac Formáty souborů Manuál –
- Darwine a Operační Systém Mac Formáty souborů Manuál –
- Darwine a Operační Systém Mac Obecné příkazy Manuál –
Další odkazy:
- Knihovna vývojářů Apple: Začínáme s launchd na Wayback Machine (archivováno 4. července 2007)
- Launchd: Jeden program, který jim vládne všem - YouTube - prezentace Davea Zarzyckého nahraná 8. Října 2007 autorem GoogleTechTalks
- wiki
.freebsd .org / launchd - vývojář
.jablko .com /knihovna /archiv /dokumentace / MacOSX /Pojmový / BPSystemStartup /