Launchd ist ein Werkzeug zum Starten, Stoppen und Verwalten von Skripten und Prozessen. Wenn Sie mit einer Linux-Version gearbeitet haben, kennen Sie vielleicht Cron. launchd ist grundsätzlich cron in macOS.

Was sind Dämonen?

Daemons (ausgesprochen "Dämonen") sind Skripte, die im Hintergrund laufen. Im Gegensatz zu Anwendungen werden Daemons als Prozesse ausgeführt und unterliegen nicht der direkten Kontrolle des Benutzers oder einer anderen Anwendung. Auf Mac OS steuern sie das launchd-Framework, das entscheidet, wann sie starten und stoppen.

Der ungewöhnliche Name kommt von Maxwells Dämon, einem imaginären Agenten, der Moleküle in einem thermodynamischen Gedankenexperiment sortiert.

Skripte schreiben

Um Daemons über Launchd laufen zu lassen, müssen Sie einige Skripte schreiben. Die gebräuchlichste Skriptsprache ist bash. Wenn Sie mehr über Bash Scripting erfahren möchten, können Sie unseren Anfängerleitfaden zum Bash Scripting lesen.

Verwenden von Launchd

Skripte in Launchd werden von Jobdefinitionen ausgelöst, bei denen es sich um .plist-Dateien handelt, die in bestimmten Verzeichnissen gespeichert sind. Diese XML-Dateien geben dem Job einen Namen, geben das Skript an, das gestartet werden soll, und geben an, wann das Skript ausgeführt werden soll. Sobald Sie Ihr Skript geschrieben haben, schreiben und laden Sie eine Jobdefinition, die das Skript zur richtigen Zeit startet.

Eine Jobdefinition sieht ungefähr wie folgt aus:

 Etikette  local.restart  Programm  /Users/user/Scripts/restart.sh  RunAtLoad 

Ändern Sie sie gegebenenfalls und fügen Sie sie dann in eine Textdatei mit der Erweiterung .plist ein, bevor Sie sie in das richtige Verzeichnis kopieren (siehe unten).

Die Jobbeschreibung enthält einige Schlüsselelemente:

  • Label: Der Name des Jobs innerhalb von launchd. Muss für jeden Job eindeutig sein. Diese sind in umgekehrter Domänennotation geschrieben und "lokal" ist eine großartige Domäne für private Agenten.
  • Programm: Der vollständige Pfad des Skripts, in dem diese Jobbeschreibung gestartet wird.
  • RunAtLoad: beschreibt, wann das Skript ausgeführt werden soll. Hier gibt es ein paar verschiedene Möglichkeiten:
    • RunAtLoad : Wird ausgeführt, sobald die Jobdefinition geladen wurde. Läuft nur einmal pro Ladung.
    • StartInterval : Starten Sie den Job alle n Sekunden. In diesem Beispiel wird der Job alle 7200 Sekunden oder alle 2 Stunden ausgeführt.
       StartInterval  7200 
    • StartCalendarInterval : Führt den Job zu einem bestimmten Zeitpunkt und zu einem bestimmten Datum aus. Der unten stehende Code führt den Job jeden Tag um 9 Uhr morgens aus.
       StartCalendarInterval  Stunde  9  Minute  0 

Agenten gegen Dämonen

Sobald Sie Ihre Jobbeschreibung geschrieben haben, müssen Sie sie im entsprechenden Verzeichnis speichern.

launchd unterscheidet weiterhin zwischen Agenten und Daemons. Ein Agent wird im Auftrag des angemeldeten Benutzers ausgeführt, während ein Daemon unter dem Benutzer root ausgeführt wird. Dies bedeutet, dass Sie einen Agenten verwenden können, wenn Sie ein Skript auf ein bestimmtes Benutzerkonto beschränken möchten. Wenn Sie möchten, dass etwas ausgeführt wird, egal wer angemeldet ist, verwenden Sie einen Daemon.

Der Unterschied zwischen Agenten und Daemons ergibt sich aus dem Ort, an dem sie auf dem Computer gespeichert sind:

  • "~ / Library / LaunchAgents" wird im Auftrag des angemeldeten Benutzers ausgeführt
  • "/ Library / LaunchDaemons" wird im Auftrag der Root-Benutzer ausgeführt

Sie müssen Ihren Plist am richtigen Ort speichern.

Laden von Jobs in launchctl

Sobald Sie Ihre Skripte erstellt und Ihren Agenten an der richtigen Stelle gespeichert haben, müssen Sie ihn in launchctl . Dies wird automatisch bei Logins in der Zukunft passieren.

Um zu sehen, was gerade in laucnhctl läuft, können Sie die launchctl list im Terminal verwenden. Diese gigantische Liste kann für Ihr Skript grepped werden, indem Sie es mit etwas wie dem folgenden beschriften:

 launchctl Liste | grep local.restart 

Öffnen Sie Terminal, um ein Skript zu laden, und verwenden Sie den folgenden Befehl:

 launchctl load ~ / Bibliothek / LaunchAgents / local.restart.plist 

Verwenden Sie den Befehl unload, um das Skript aus der launchctl-Queue zu entfernen:

 launchctl entladen ~ / Library / LaunchAgents / local.restart.plist 

Wenn Sie einen Job laden, wird er in die Launch-Warteschlange gestellt, und der Job wird zu dem in den Startbedingungen angegebenen Zeitpunkt ausgeführt. Wenn Sie ein Skript sofort ausführen möchten, sollten Sie den Befehl "start" verwenden:

 launchctl starte local.restart 

Dieser Befehl übernimmt die Bezeichnung des Jobs und funktioniert nur, wenn der Job bereits in launchctl geladen wurde.

Fazit

Sie können launchd verwenden, um Skripts zu erstellen, die beispielsweise Dateien bereinigen, den Server nach einem Zeitplan neu starten oder eine Anwendung ausführen, wenn eine bestimmte Datei angezeigt wird. Um mehr über launchd zu erfahren, können Sie das laucnhd-Tutorial lesen.

Bildnachweis: Maxwell's_demon