lanceret | |
---|---|
Type | System initialiseringssystem |
Forfatter | Apple Inc. |
Udvikler | Æble |
Skrevet i | C |
Operativ system | macOS |
Første udgave | 29. april 2005 |
Stat | Understøttet |
Licens | Apache-licens 2.0 |
Internet side | opensource.apple.com/tar... |
launchd er et open source macOS init-system skabt til at erstatte SysVinit og SystemStarter . Launchd-processen har en PID på 1 og er ansvarlig for at starte andre processer og genstarte dem, hvis den fejler, dvs. den udfører init -funktioner (i nyere versioner af Linux systemd ). Det erstatter også cron . Processer, der kører efter systemstart før login, skrives til mappen /Library/LaunchDaemons. Processer, der kører efter login, er placeret i mappen /Library/LaunchAgents. I disse mapper oprettes filer med xml-indhold, der styrer lanceringen af processer. Der har været forsøg på at portere lanceret til FreeBSD og afledte systemer.
Der er to hovedprogrammer i launchd: launchd og launchctl.
launchd administrerer dæmoner på både system- og brugerniveau. Ligesom xinetd kan launchd starte dæmoner efter behov. Ligesom watchdogd kan launchd overvåge dæmoner for at sikre, at de stadig kører.
launchctl er et kommandolinjeprogram, der får adgang til launchd ved hjælp af IPC og ved, hvordan man parser filerne, der bruges til at beskrive de job, der skal køres, og serialisere dem ved hjælp af en specialiseret ordbogsprotokol, som launchd forstår. launchctl kan bruges til at indlæse og fjerne dæmoner, starte og stoppe overvågede job, der køres, få systembrugsstatistik for launched og dens underordnede processer og konfigurere miljøindstillinger.
launchd har to hovedopgaver. Den første er at starte systemet, og den anden er at indlæse og vedligeholde tjenester. Her er en forenklet visning af at køre et Mac OS X Tiger-system på en PowerPC .
launchd er meget forskellig fra SystemStarter , idet den muligvis ikke starter alle dæmoner ved opstart. Nøglen til launchd, ligesom xinetd, er at starte dæmoner efter behov. Når launchctl viser jobs ved opstart, beder den launchd om at reservere og lytte på alle porte, der anmodes om af disse job. Hvis dette er angivet i arket ved hjælp af "OnDemand"-nøglen, er dæmonen faktisk ikke indlæst i øjeblikket. Snarere vil launchd lytte på en port, starte dæmonen, når det er nødvendigt, og lukke den ned, når det ikke længere er nødvendigt. Når dæmonen er indlæst, vil launchd overvåge den og sørge for, at den kører, hvis det er nødvendigt. På denne måde ligner det watchdogd og deler watchdogd's krav om, at processer ikke forsøger at splitte eller dæmonisere sig selv. Hvis en proces går i baggrunden, vil launchd miste den og forsøge at genstarte den. Mac OS X Tiger indlæses derfor meget hurtigere end tidligere versioner. Systemet registrerer kun de dæmoner, der skulle køre og starter dem faktisk ikke, før de er nødvendige. Faktisk er statuslinjen, der vises under indlæsning, bare en placebo ved navn WaitingForLoginWindow [1] , som faktisk ikke viser andet end tiden. Den sværeste del at administrere under lanceringen er afhængighederne. SystemStarter har et meget simpelt afhængighedssystem, der bruger nøglerne Uses, Requires og Giver på listen over startelementer. Der er to hovedstrategier, når du opretter afhængigheder til at køre på Tiger: IPC tillader dæmoner at tale med hinanden for at finde ud af afhængigheder, eller dæmoner kan se på filer eller ændre stier. SystemStarter blev stadig understøttet før OS X Mountain Lion , men blev fjernet i OS X Yosemite .
I launchd er servicestyring centraliseret i launchctl-applikationen. I sig selv kan launchctl acceptere kommandoer fra kommandolinjen, fra standardinput eller køre interaktivt. Med superbrugerrettigheder kan launchctl bruges til at foretage globale ændringer. launchctl kommunikerer med launchd via en Mach -specifik IPC-mekanisme.
En egenskabsliste (plist) er en type fil, som launchd bruger til at konfigurere programmet. Når launchd scanner en mappe eller et job sendes med launchctl, læser den en plist-fil, der beskriver, hvordan programmet skal startes.
Listen over almindeligt anvendte nøgler er angivet nedenfor. Alle nøgler er valgfrie, medmindre andet er angivet. For en komplet liste, se Apples manualside for launchd.plist [2] .
Nøgler | Type | Bemærk |
---|---|---|
Label | Linje | Jobtitel. Efter konvention er jobetiketten den samme som plist-filnavnet uden .plist-udvidelsen. Påkrævet. |
Program | Linje | Sti til den eksekverbare fil. Nyttigt til simple lanceringer. Der kræves mindst én Program- eller ProgramArguments-nøgle. |
ProgramArguments | Array af strenge | En række strenge, der repræsenterer UNIX-kommandoen. Den første linje er normalt stien til den eksekverbare, mens de sidste linjer indeholder muligheder eller muligheder. Der kræves mindst én Program- eller ProgramArguments-nøgle. |
UserName | linje
(standard root eller nuværende bruger) |
Jobbet kører som den givne bruger, som muligvis er den bruger, der har sendt det til launchd. |
OnDemand
(Forældet siden 10.5) |
logisk
(standard JA) |
Forældet fra 10.5 med en mere kraftfuld KeepAlive-mulighed. Boolesk flag, der bestemmer, om jobbet kører kontinuerligt eller ej. |
RunAtLoad | logisk
(standard NEJ) |
Et boolesk flag, der bestemmer, om opgaven startes umiddelbart efter, at opgaven er indlæst i launchd. |
StartOnMount | logisk
(standard NEJ) |
Et boolesk flag, der bestemmer, om opgaven køres, når et nyt filsystem er monteret. |
QueueDirectories | Array af strenge | Søger i en mappe efter nye filer. Biblioteket skal være tomt til at begynde med og skal returneres til en tom tilstand, før QueueDirectories kører sin opgave igen. |
WatchPaths | Array af strenge | Ser på filsystemstien for ændringer. Kan være en fil eller mappe. |
StartInterval | heltal | Planlægger et job til at køre efter en tilbagevendende tidsplan. Angiver det antal sekunder, der skal ventes mellem kørsler. |
StartCalendarInterval | Ordbog over heltal
eller Array af heltalsordbøger |
Arbejdsplanlægning. Syntaks ligner Cron |
RootDirectory | Linje | Jobbet vil blive placeret i denne mappe før udførelse. |
WorkingDirectory | Linje | Jobbet vil blive overført til denne mappe før udførelse. |
StandardInPath... |
Linje | Taster til at specificere input- og outputfiler for en kørende proces. |
LowPriorityIO | logisk | Fortæller kernen, at denne opgave har en lav prioritet for filsystem I/O. |
AbandonProcessGroup | logisk
(standard NEJ) |
Boolesk flag, der bestemmer, om underprocesser startet fra en opgave startet af launchd, vil blive dræbt, når opgaven slutter. Nyttigt, når en kortvarig opgave starter en langvarig delopgave, men kan føre til zombieprocesser. |
SessionCreate | logisk
(standard NEJ) |
Boolesk flag, der bestemmer, om der oprettes en sikkerhedssession for opgaven og dens underprocesser. |
Navnet på hver nøgle i Sockets-sektionen vil blive placeret i jobbets miljø, når det køres, og filbeskrivelsen for den socket vil være tilgængelig i den miljøvariabel. Dette adskiller sig fra systemd socket-aktivering ved, at navnet på socketdefinitionen i jobkonfigurationen er hårdkodet i applikationen. Denne protokol er mindre fleksibel, selvom den ligesom systemd ikke kræver, at dæmonen hardkoder den indledende filbeskrivelse (3 [3] fra 2014 ).
Softwaren er designet og skrevet af Dave Zarzhitsky hos Apple . Virksomheden planlagde at erstatte alle følgende i macOS -miljøet -
De fleste af disse ting blev droppet, da lanceringen blev introduceret med Mac OS X v10.4 (Tiger).
I 2005 udsatte R. Tyler Croy lanceringen af FreeBSD som en del af Google Summer of Code-projektet. Det kan ikke køres som PID 1 (kun sessionsinitialisering), og det bruges normalt ikke på denne platform. [fire]
I 2006 blev Ubuntu Linux-distributionen overvejet at bruge launchd. Denne mulighed blev afvist, fordi kildekoden var under Apple Public License - beskrevet som et "uundgåeligt licensproblem" [5] . I stedet udviklede Ubuntu -udviklerne og skiftede til deres eget Upstart -servicestyringsværktøj .
I august 2006 genlancerede Apple under Apache-licensen version 2.0 for at lette adoptionen af andre open source-udviklere [6] . De fleste Linux - distributioner bruger systemd eller Upstart , eller fortsætter med at bruge Init , og BSD-lignende systemer fortsætter også med at bruge Init .
I december 2013 annoncerede R. Tyler Croy sin hensigt om at genoptage arbejdet med sin version af launchd for FreeBSD , og hans "openlaunchd" Github- lager blev efterfølgende aktivt [7] .
I 2014, startende med OS X 10.10 og iOS 8 , flyttede Apple koden til at køre til den lukkede kildekode libxpc [8] .
I august 2015 annoncerede Jordan Hubbard og Kip Macy lanceringen af NextBSD , som er baseret på FreeBSD-CURRENT-kernen, mens de tilføjede til Mach IPC, Libdispatch, notified, asld, launchd og andre komponenter afledt af Darwin , som består af open source til macOS .
Versioner | Licens | Var inkluderet i MacOS- versionen |
---|---|---|
lanceret 106 | Apple Public Source License [9] | |
lanceret 106.3 | Apple Public Source License [12] | |
lanceret 106.10 | Apple Public Source License [17] | |
lanceret 106.13 | Apple Public Source License [20] | |
lanceret 106.14 | Apple Public Source License [23] | |
lanceret 106.20 | Apple Public Source License [30] | |
lanceret 152 | Apache-licens 2.0 [35] | |
lanceret 257 | Apache-licens 2.0 [36] | |
lanceret 258.1 | Apache-licens 2.0 [39] |
|
lanceret 258.12 | Apache-licens 2.0 [41] | |
lanceret 258.18 | Apache-licens 2.0 [44] |
|
lanceret 258.19 | Apache-licens 2.0 [46] |
|
lanceret 258.22 | Apache-licens 2.0 [48] |
|
lanceret 258,25 | Apache-licens 2.0 [50] |
|
lanceret 328 | Apache-licens 2.0 [52] | |
lanceret 329.3 | Apache-licens 2.0 [56] |
|
lanceret 329.3.1 | Apache-licens 2.0 [58] |
|
lanceret 329.3.2 | Apache-licens 2.0 [60] |
|
lanceret 329.3.3 | Apache-licens 2.0 [62] | |
lanceret 392.18 | Apache-licens 2.0 [66] | |
lanceret 392,35 | Apache-licens 2.0 [69] |
|
lanceret 392.36 | Apache-licens 2.0 [71] |
|
lanceret 392.38 | Apache-licens 2.0 [73] |
|
lanceret 392.39 | Apache-licens 2.0 [75] |
|
lanceret 442.21 | Apache-licens 2.0 [77] | |
lanceret 442.26.2 | Apache-licens 2.0 [80] | |
lanceret 842.1.4 | Apache-licens 2.0 [85] | |
lanceret 842.90.1 | Apache-licens 2.0 [88] | |
lanceret 842.92.1 | Apache-licens 2.0 [91] |
macOS | |
---|---|
Ansøgninger | |
Hjælpeprogrammer |
|
Teknologi og brugerflade _ |
|