gestartet - launchd
Originalautor(en) | Dave Zarzycki |
---|---|
Entwickler | Apple Inc. |
Erstveröffentlichung | 29. April 2005 |
Geschrieben in | C |
Betriebssystem | macOS , FreeBSD , iOS , watchOS |
Typ | Init- Daemon |
Lizenz | Proprietäre Software (früher APSL und später Apache License 2.0 ) |
Webseite |
Open - Source - |
launchd ist ein Init- und Betriebssystem-Dienstverwaltungs- Daemon, der von Apple Inc. als Teil von macOS entwickelt wurde , um seine BSD- ähnlichen init und SystemStarter zu ersetzen . Es wurden Anstrengungen gewesen Port launchd zu FreeBSD und abgeleitete Systeme.
Komponenten
Es gibt zwei Hauptprogramme im launchd-System: launchd und launchctl.
launchd verwaltet die Daemons sowohl auf System- als auch auf Benutzerebene. Ähnlich wie xinetd kann launchd Daemons bei Bedarf starten. Ähnlich wie watchdogd kann launchd Daemons überwachen, um sicherzustellen, dass sie weiterlaufen. launchd hat auch init als PID 1 auf macOS ersetzt und ist daher für das Starten des Systems beim Booten verantwortlich.
Konfigurationsdateien definieren die Parameter der Dienste, die von launchd ausgeführt werden. Die auf der Eigenschaftsliste basierenden Dateien werden in den Unterverzeichnissen LaunchAgents und LaunchDaemons der Bibliotheksordner gespeichert und verfügen über ungefähr dreißig verschiedene Schlüssel, die festgelegt werden können. launchd selbst hat keine Kenntnis von diesen Konfigurationsdateien oder die Möglichkeit sie zu lesen - dafür ist "launchctl" verantwortlich.
launchctl ist eine Befehlszeilenanwendung, die über IPC mit launchd kommuniziert und weiß, wie die Eigenschaftenlistendateien analysiert werden, die zur Beschreibung von launchd-Jobs verwendet werden, und sie mit einem spezialisierten Wörterbuchprotokoll, das launchd versteht, serialisiert. launchctl kann verwendet werden, um Daemons zu laden und zu entladen, Launchd-gesteuerte Jobs zu starten und zu stoppen, Systemauslastungsstatistiken für launchd und seine untergeordneten Prozesse zu erhalten und Umgebungseinstellungen festzulegen.
startd
launchd hat zwei Hauptaufgaben. Die erste besteht darin , das System zu booten , und die zweite besteht darin, Dienste zu laden und zu warten.
Hier ist eine vereinfachte Ansicht des Systemstarts von Mac OS X Tiger auf einem PowerPC- Mac (auf einem Intel- Mac ersetzt EFI Open Firmware und boot.efi
ersetzt BootX ):
- Open Firmware aktiviert, initialisiert die Hardware und lädt dann BootX.
- BootX lädt den Kernel, dreht den Pinwheel-Cursor und lädt alle benötigten Kernel-Erweiterungen (kexts).
- Der Kernel lädt launchd.
- launchd führt
/etc/rc
verschiedene Skripte aus, die durch/System/Library/LaunchDaemons
und scannen/Library/LaunchDaemons
, ruft nach Bedarf launchctl in den plists auf, dann startet launchd das Anmeldefenster.
In Schritt 4 durchsuchen die Startskripts einige verschiedene Verzeichnisse nach auszuführenden Jobs. Es gibt zwei verschiedene Verzeichnisse, die gescannt werden:
- Die LaunchDaemons-Verzeichnisse enthalten Elemente, die als Root ausgeführt werden, im Allgemeinen Hintergrundprozesse.
- Die LaunchAgents-Verzeichnisse enthalten Jobs, sogenannte Agent-Anwendungen, die als Benutzer oder im Kontext des Benutzerlandes ausgeführt werden. Dies können Skripte oder andere Vordergrundelemente sein, und sie können sogar eine Benutzeroberfläche enthalten.
Diese Verzeichnisse werden alle in den typischen Bibliotheksverzeichnissen von Mac OS X gespeichert.
launchd unterscheidet sich stark von SystemStarter darin, dass es möglicherweise nicht alle Daemons beim Booten startet. Der Schlüssel zu launchd und ähnlich wie bei xinetd ist die Idee von Launch-on-Demand-Daemons. Wenn launchctl beim Booten die Job-Plists durchsucht, fordert es launchd auf, alle von diesen Jobs angeforderten Ports zu reservieren und abzuhören. Wenn dies in der plist durch den Schlüssel "OnDemand" angegeben ist, wird der Daemon zu diesem Zeitpunkt nicht tatsächlich geladen. Vielmehr lauscht launchd auf den Port, startet den Daemon bei Bedarf und fährt ihn herunter, wenn er nicht mehr benötigt wird. Nachdem ein Daemon geladen wurde, verfolgt launchd ihn und stellt bei Bedarf sicher, dass er ausgeführt wird. Auf diese Weise ist es wie watchdogd und teilt die Anforderung von watchdogd, dass Prozesse nicht versuchen, sich selbst zu forken oder zu dämonisieren. Wenn ein Prozess in den Hintergrund gerät, verliert launchd den Überblick und versucht, ihn neu zu starten.
Folglich bootet Mac OS X Tiger viel schneller als frühere Versionen. Das System muss lediglich die auszuführenden Daemons registrieren und startet sie erst dann, wenn sie benötigt werden. Tatsächlich ist der Fortschrittsbalken, der während des Bootvorgangs angezeigt wird, nur eine Placebo-Anwendung (mit dem Namen WaitingForLoginWindow), die nichts anderes als den Zeitablauf anzeigt.
Der am schwierigsten zu verwaltende Teil während eines launchd-Boots sind Abhängigkeiten. SystemStarter hatte ein sehr einfaches Abhängigkeitssystem, das die Schlüssel "Uses", "Requires" und "Provides" in der Plist eines Startup-Elements verwendet. Es gibt zwei Hauptstrategien beim Erstellen von launchd-Abhängigkeiten auf Tiger: IPC ermöglicht es Daemons, untereinander zu sprechen, um Abhängigkeiten auszuarbeiten, oder Daemons können Dateien oder Pfade auf Änderungen überprüfen. Die Verwendung von IPC ist viel subtiler als die Tasten des SystemStarters und erfordert mehr Arbeit vom Entwickler, kann jedoch zu saubereren und schnelleren Starts führen. SystemStarter wurde bis OS X Mountain Lion noch unterstützt , wurde aber in OS X Yosemite entfernt .
launchctl
In launchd ist die Steuerung der Dienste in der launchctl
Anwendung zentralisiert .
Launchctl kann eigenständig Befehle von der Befehlszeile, von Standard in oder im interaktiven Modus ausführen. Mit Superuser- Berechtigungen kann launchctl verwendet werden, um Änderungen auf globaler Ebene vorzunehmen. Ein Satz von launchctl-Befehlen kann permanent gemacht werden, wenn er in /etc/launchd.conf gespeichert wird . (Eine benutzerspezifische ~/.launchd.conf- Datei scheint in Betracht gezogen worden zu sein, wird aber in keiner vorhandenen Version von macOS unterstützt.)
launchctl kommuniziert mit launchd über einen Mach- spezifischen IPC-Mechanismus.
Objektliste
Eine Eigenschaftsliste (plist) ist ein Dateityp, den launchd für die Programmkonfiguration verwendet. Wenn launchd einen Ordner scannt oder ein Job mit launchctl übergeben wird, liest es eine plist-Datei, die beschreibt, wie das Programm ausgeführt werden soll.
Nachfolgend finden Sie eine Liste häufig verwendeter Tasten. Alle Schlüssel sind optional, sofern nicht anders angegeben. Eine vollständige Liste finden Sie auf der Manpage von Apple für launchd.plist
.
Taste | Typ | Beschreibung |
---|---|---|
Label
|
Zeichenfolge | Der Name des Jobs. Konventionell ist die Auftragsbezeichnung mit dem Namen der plist-Datei identisch , jedoch ohne die Erweiterung .plist . Erforderlich . |
Program
|
Zeichenfolge | Ein Pfad zu einer ausführbaren Datei. Nützlich für einfache Starts. Mindestens eines von Program oder ProgramArguments ist erforderlich .
|
ProgramArguments
|
Reihe von Zeichenfolgen | Ein Array von Strings, die einen UNIX-Befehl darstellen. Der erste String ist im Allgemeinen ein Pfad zu einer ausführbaren Datei, während letztere Strings Optionen oder Parameter enthalten. Mindestens eines von Program oder ProgramArguments ist erforderlich .
|
UserName
|
String (standardmäßig root oder aktueller Benutzer)
|
Der Job wird als der angegebene Benutzer ausgeführt, der der Benutzer sein kann (oder auch nicht), der ihn an launchd gesendet hat. |
OnDemand
(Eingestellt seit 10.5) |
Boolean (standardmäßig YES )
|
Veraltet ab 10.5 mit der leistungsstärkeren KeepAlive Option. Ein boolesches Flag, das definiert, ob ein Job kontinuierlich ausgeführt wird oder nicht.
|
RunAtLoad
|
Boolean (standardmäßig NO )
|
Ein boolesches Flag, das definiert, ob eine Aufgabe sofort gestartet wird, wenn der Job in launchd geladen wird. |
StartOnMount
|
Boolean (standardmäßig NO )
|
Ein boolesches Flag, das definiert, ob eine Task gestartet wird, wenn ein neues Dateisystem gemountet wird. |
QueueDirectories
|
Reihe von Zeichenfolgen | Beobachten Sie ein Verzeichnis für neue Dateien. Das Verzeichnis muss zunächst leer sein und muss in einen leeren Zustand zurückgesetzt werden, bevor QueueDirectories seine Aufgabe erneut gestartet wird.
|
WatchPaths
|
Reihe von Zeichenfolgen | Beobachten Sie einen Dateisystempfad auf Änderungen. Kann eine Datei oder ein Ordner sein. |
StartInterval
|
Ganze Zahl | Plant den Job so, dass er nach einem sich wiederholenden Zeitplan ausgeführt wird. Gibt die Anzahl der Sekunden an, die zwischen den Läufen gewartet werden soll. |
StartCalendarInterval
|
Dictionary of Integers oder Array of Dictionaries of Integers |
Arbeit planen. Die Syntax ähnelt cron . |
RootDirectory
|
Zeichenfolge | Der Job wird vor der Ausführung in dieses Verzeichnis gechrootet . |
WorkingDirectory
|
Zeichenfolge | Der Job wird vor der Ausführung in dieses Verzeichnis gespeichert . |
|
Zeichenfolge | Schlüssel zum Bestimmen von Dateien für die Eingabe und Ausgabe für den gestarteten Prozess. |
LowPriorityIO
|
Boolesches | Teilt dem Kernel mit, dass diese Aufgabe bei Dateisystem-I/O eine niedrige Priorität hat. |
AbandonProcessGroup
|
Boolean (standardmäßig NO )
|
Ein boolesches Flag, das definiert, ob Unterprozesse, die von einer von launchd gestarteten Aufgabe gestartet werden, beendet werden, wenn die Aufgabe endet. Nützlich, wenn eine kurzlebige Aufgabe eine langlebige Unteraufgabe startet, aber zu Zombie-Prozessen führen kann . |
SessionCreate
|
Boolean (standardmäßig NO )
|
Ein boolesches Flag, das definiert, ob eine Sicherheitssitzung für die Aufgabe und ihre Unterprozesse erstellt wird. |
Socket-Aktivierungsprotokoll
Der Name jedes Schlüssels unter Sockets wird in der Umgebung des Jobs platziert, wenn er ausgeführt wird, und der Dateideskriptor dieses Sockets wird in dieser Umgebungsvariablen verfügbar sein. Dies unterscheidet sich von der Socket-Aktivierung von systemd dadurch, dass der Name einer Socket-Definition innerhalb der Jobkonfiguration fest in die Anwendung einprogrammiert ist. Dieses Protokoll ist weniger flexibel, obwohl es nicht wie systemd erfordert, dass der Daemon einen Startdateideskriptor festcodiert (ab 2014 ist es 3).
Geschichte
Die Software wurde von Dave Zarzycki bei Apple entworfen und codiert . Das Unternehmen plante, dass alle der folgenden Funktionen in OS X- Umgebungen abgelöst werden:
– und die meisten dieser Dinge wurden abgelöst, als launchd mit Mac OS X 10.4 (Tiger) eingeführt wurde.
Im Jahr 2005 portierte R. Tyler Croy launchd im Rahmen des Google Summer of Code Project auf FreeBSD . Es konnte nicht als PID 1 (nur eine Sitzungsinit) ausgeführt werden und wurde auf dieser Plattform nicht häufig verwendet.
Im Jahr 2006 erwog die Ubuntu- Linux-Distribution die Verwendung von launchd. Die Option wurde abgelehnt, da der Quellcode der Apple Public Source License unterlag – beschrieben als „unvermeidliches Lizenzproblem“. Ubuntu entwickelte stattdessen sein eigenes Service-Management-Tool Upstart und wechselte zu diesem .
Im August 2006 Apple - neu lizenziert launchd unter der Apache - Lizenz, Version 2.0 in dem Bemühen , Annahme von anderem Open - Source - Entwickler zu erleichtern. Die meisten Linux-Distributionen verwenden systemd oder Upstart oder fahren mit init fort , und die BSDs fahren auch mit init fort.
Im Dezember 2013 kündigte R. Tyler Croy seine Absicht an, die Arbeit an seiner Portierung von launchd auf FreeBSD wieder aufzunehmen, und sein "openlaunchd" GitHub-Repo nahm daraufhin zu.
Die letzte Wayback Machine-Erfassung des Mac OS Forge-Bereichs für launchd war im Juni 2012, und die neueste Open-Source-Version von Apple war 842.92.1 im Code für OS X 10.9.5.
Im Jahr 2014 hat Apple mit OS X 10.10 und iOS 8 den Code für launchd in die Closed-Source-Libxpc verschoben.
Im August 2015 kündigten Jordan Hubbard und Kip Macy NextBSD an , das auf dem FreeBSD-CURRENT-Kernel basiert, während Mach IPC, Libdispatch, benachrichtigt, asld, launchd und andere Komponenten hinzugefügt wurden, die von Darwin, Apples Open-Source-Code für OS X, abgeleitet sind.
Apple Open Source Release-Verlauf
Ausführung | Lizenz | In macOS- Versionen enthalten | Enthaltene Apple Developer Tools- Versionen |
---|---|---|---|
gestartet 106 | Apple Public Source-Lizenz |
|
|
gestartet 106.3 | Apple Public Source-Lizenz |
|
|
gestartet 106.10 | Apple Public Source-Lizenz |
|
|
gestartet 106.13 | Apple Public Source-Lizenz |
|
|
gestartet 106.14 | Apple Public Source-Lizenz |
|
|
gestartet 106.20 | Apple Public Source-Lizenz |
|
|
gestartet 152 | Apache-Lizenz 2.0 | ||
gestartet 257 | Apache-Lizenz 2.0 |
|
|
gestartet 258.1 | Apache-Lizenz 2.0 |
|
|
gestartet 258.12 | Apache-Lizenz 2.0 |
|
|
gestartet 258.18 | Apache-Lizenz 2.0 |
|
|
gestartet 258.19 | Apache-Lizenz 2.0 |
|
|
gestartet 258.22 | Apache-Lizenz 2.0 |
|
|
gestartet 258,25 | Apache-Lizenz 2.0 |
|
|
gestartet 328 | Apache-Lizenz 2.0 |
|
|
gestartet 329.3 | Apache-Lizenz 2.0 |
|
|
gestartet 329.3.1 | Apache-Lizenz 2.0 |
|
|
gestartet 329.3.2 | Apache-Lizenz 2.0 |
|
|
gestartet 329.3.3 | Apache-Lizenz 2.0 |
|
|
gestartet 392.18 | Apache-Lizenz 2.0 |
|
|
gestartet 392.35 | Apache-Lizenz 2.0 |
|
|
gestartet 392.36 | Apache-Lizenz 2.0 |
|
|
gestartet 392.38 | Apache-Lizenz 2.0 |
|
|
gestartet 392.39 | Apache-Lizenz 2.0 |
|
|
gestartet 442.21 | Apache-Lizenz 2.0 |
|
|
gestartet 442.26.2 | Apache-Lizenz 2.0 |
|
|
gestartet 842.1.4 | Apache-Lizenz 2.0 |
|
|
gestartet 842.90.1 | Apache-Lizenz 2.0 |
|
|
gestartet 842.92.1 | Apache-Lizenz 2.0 |
|
Siehe auch
- systemd : ein ähnliches Dienstprogramm, das von Red Hat für den Einsatz in verschiedenen Mainline-Linux-Distributionen entwickelt wurde
- Service-Management-Einrichtung
- Super-Server
- TCP-Wrapper
- Verwaltung von Betriebssystemdiensten
Verweise
Externe Links
Apple-Entwickler:
- Mac Developer Library: Daemons and Services Programmierhandbuch: Erstellen von Start-Daemons und -Agenten
- Mac-Entwicklerbibliothek: Technischer Hinweis TN2083: Daemons and Agents
Apple-Entwickler-Dokumentenbibliothek im Ruhestand:
- Darwin and macOS System Manager's Manual : Systemweiter Daemon und Pro-User Agent Manager –
- Darwin und macOS Dateiformate Handbuch -
- Darwin und macOS Dateiformate Handbuch -
- Darwin und macOS Allgemeine Befehle Handbuch -
Andere Links:
- Apple Developer Library: Erste Schritte mit launchd auf der Wayback Machine (archiviert am 4. Juli 2007)
- Launchd: One Program to Rule them All – YouTube – Präsentation von Dave Zarzycki, hochgeladen am 8. Oktober 2007 von GoogleTechTalks
- wiki
.freebsd .org /launchd - Entwickler
.apple .com /library /archive /documentation /MacOSX /Conceptual /BPSystemStartup /