So verwenden Sie Launchd zum Planen von Ausführungsskripten auf dem Mac

So verwenden Sie Launchd zum Planen von Ausführungsskripten auf dem Mac

Die Automatisierung von Aufgaben durch die Planung von Skripts ist eine leistungsstarke Funktion, auf die sich viele Administratoren täglich verlassen. Normale Mac-Benutzer können diese Leistung auch mit launchd nutzen, Apples bevorzugtem Tool zur Aufgabenautomatisierung und -verwaltung unter macOS. Von der Planung einfacher Aufgaben wie dem Ausschalten von WLAN zu einer bestimmten Stunde bis hin zur Durchführung komplexer Systemsicherungen kann Ihnen launchd auf dem Mac dabei helfen, Ihre Arbeitsabläufe zu automatisieren, Zeit zu sparen und sicherzustellen, dass Ihr System genau so läuft, wie Sie es möchten.

Was wird gestartet?

So wie ein Orchester einen Dirigenten benötigt, der die verschiedenen Instrumente führt und harmonisiert, verlässt sich macOS Ventura mit seinen unzähligen Prozessen und Diensten auf launchd, um sicherzustellen, dass alles perfekt zusammenspielt. Als erster Prozess, der vom macOS-Kernel beim Hochfahren Ihres Computers gestartet wird, steht launchd im Mittelpunkt und orchestriert alle nachfolgenden Prozesse, Dienste und Anwendungen, ähnlich wie ein Dirigent, der mit dem ersten Taktstock den Beginn einer Symphonie ankündigt.

Über seine Rolle bei der Systemorchestrierung hinaus kann launchd zum Planen von Skripten verwendet werden, einer Reihe von Befehlen, die zur Ausführung einer bestimmten Aufgabe geschrieben werden. Dies erfolgt mithilfe des launchctlBefehls, der als Schnittstelle für Benutzer zur Kommunikation und Steuerung des gestarteten Dirigenten dient.

Dämonen und Agenten

launchd wird manchmal als Daemon bezeichnet, ein Computerprogramm, das als Hintergrundprozess ausgeführt wird und normalerweise nicht für die direkte Steuerung durch einen Benutzer konzipiert ist. Was Daemons betrifft, ist launchd etwas Besonderes, da es der Maestro aller anderen macOS-Daemons ist und entscheiden kann, wann sie starten und stoppen. Diese untergeordneten Daemons werden unter dem Root-Benutzer ausgeführt und können daher nahezu alles tun.

Maxwell Demon Wiki-Grafik
Bildquelle: Wikipedia

Als Benutzer, der an der Aufgabenplanung interessiert ist, ist die Ausführung von Skripts unter dem Root-Benutzer jedoch nicht immer wünschenswert oder notwendig. Hier kommen Agenten ins Spiel. Agenten werden im Auftrag eines angemeldeten Benutzers ausgeführt, bieten eine eingeschränktere Umgebung und stellen sicher, dass Skripte oder Aufgaben mit den Berechtigungen und Präferenzen dieses bestimmten Benutzers ausgeführt werden. Wenn Sie beispielsweise möchten, dass ein Skript ausgeführt wird, das Einstellungen ändert oder auf Dateien in Ihrem Konto zugreift, verwenden Sie einen Agenten.

Skripte schreiben

Um Agenten oder Daemons über launchd auszuführen, müssen Sie einige Skripte schreiben. Die gebräuchlichste Skriptsprache ist Bash. Wenn Sie mehr über Bash-Scripting erfahren möchten, können Sie sich unseren Einsteigerleitfaden zum Bash-Scripting ansehen .

launchd-code-scriptto

Ihre launchd-Skripte können sich an zwei verschiedenen Orten befinden, je nachdem, ob sie als Agenten oder Daemons ausgeführt werden sollen:

  • Skripte, die als Agenten dienen und im Namen des angemeldeten Benutzers agieren sollen, sollten in „~/Library/LaunchAgents“ gespeichert werden.
  • Umgekehrt gehören Skripte, die als Daemons betriebssystemweit und unabhängig vom angemeldeten Benutzer fungieren sollen, in „/Library/LaunchDaemons“.

Denken Sie daran, dass Agenten keine Root-Berechtigungen haben und daher keine Aufgaben ausführen können, die einen umfassenden Systemzugriff erfordern. Daemons hingegen laufen mit Root-Rechten und können Aufgaben erledigen, die das gesamte System betreffen.

Berufsbeschreibungen

launchd-scripts-job-beschreibung

Skripte in launchd werden durch Jobdefinitionen ausgelöst. Plist-Dateien werden in bestimmten Verzeichnissen gespeichert. Diese XML-Dateien geben dem Job einen Namen, geben das zu startende Skript an 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 zum richtigen Zeitpunkt startet. Eine Jobdefinition sieht in etwa so aus:

<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN""http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0">
<dict>
<key>Label</key>
<string>local.restart</string>
<key>Program</key>
<string>/Users/user/Scripts/restart.sh</string>
<key>RunAtLoad</key>
<true/>
</dict></plist>

Ändern Sie es nach Bedarf und fügen Sie es dann in eine Textdatei ein. plist-Erweiterung, bevor Sie sie im richtigen Verzeichnis ablegen (siehe oben).

Die Stellenbeschreibung besteht aus einigen wichtigen Teilen:

  • Label: der Name des Jobs in launchd. Muss für jeden Job eindeutig sein. Diese sind in umgekehrter Domänenschreibweise geschrieben und „lokal“ ist eine großartige Domäne für private Agenten.
  • Programm: der vollständige Pfad des Skripts, das diese Stellenbeschreibung startet.
  • RunAtLoad: beschreibt, wann das Skript ausgeführt werden soll. Hier gibt es verschiedene Möglichkeiten:
    • RunAtLoad: Wird ausgeführt, sobald die Jobdefinition geladen ist. 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.<key>StartInterval</key> <integer>7200</integer>
    • StartCalendarInterval: Führen Sie den Job zu einem bestimmten Zeitpunkt und Datum aus. Der folgende Code führt den Job jeden Tag um 9 Uhr aus.<key>StartCalendarInterval</key> <dict> <key>Hour</key> <integer>9</integer> <key>Minute</key> <integer>0</integer> </dict>

Jobs werden in launchctl geladen

launchd-scripts-launchctl-list

Sobald Sie Ihre Skripte erstellt und Ihren Agenten am richtigen Ort gespeichert haben, müssen Sie ihn in laden launchctl. Dies wird in Zukunft automatisch bei Anmeldungen geschehen.

Um zu sehen, was gerade in laucnhctl läuft, können Sie launchctl listim Terminal verwenden. Diese riesige Liste kann für Ihr Skript durchsucht werden, indem Sie sie mit etwa der folgenden Bezeichnung versehen:

launchctl list | grep local.restart

Um ein Skript zu laden, öffnen Sie Terminal und verwenden Sie den folgenden Befehl:

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

launchd-scripts-launchctl-load

Um das Skript aus der launchctl-Warteschlange zu entfernen, verwenden Sie den unloadfolgenden Befehl:

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

launchd-scripts-launchctl-unload

Durch das Laden eines Jobs wird dieser in die launchd-Warteschlange gestellt und der Job wird zu dem in seinen Startbedingungen angegebenen Zeitpunkt ausgeführt. Wenn Sie ein Skript auf jeden Fall sofort ausführen möchten, sollten Sie den Befehl „start“ verwenden:

launchctl start local.restart

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

Häufig gestellte Fragen

Wie kann ich überprüfen, ob launchd ein Skript gestartet hat?

Sie können den launchctl listBefehl im Terminal verwenden. Dadurch werden alle geladenen Jobs angezeigt. Um ein bestimmtes Skript oder einen bestimmten Job zu finden, verwenden Sie grepz. B. launchctl list | grep your_script_name.

Was passiert, wenn launchd zu viele Systemressourcen verbraucht?

Wenn launchd übermäßig viele Ressourcen verbraucht, liegt dies normalerweise an einem fehlerhaften Skript oder Job. Sie sollten die kürzlich hinzugefügten Skripte überprüfen und sie mit entladen launchctl unload /path/to/job.plist.

Was ist der Unterschied zwischen cron und launchd?

Sowohl cron als auch launchd sind Planungsdienste, funktionieren jedoch unterschiedlich. cron ist ein älterer Unix-basierter Jobplaner, der Jobs zu festen Zeiten oder in in einer Crontab-Datei definierten Intervallen ausführt. launchd ist Apples neueres System für macOS, das Jobs basierend auf verschiedenen Auslösern starten kann – nicht nur auf der Zeit.

Kann ich neben Bash auch andere Skriptsprachen mit launchd verwenden?

launchd kann jedes Skript ausführen, das vom Terminal aus ausgeführt werden kann. Dazu gehören Skripte, die in Python, Perl, Ruby und anderen Sprachen geschrieben sind.

Bildnachweis: Pexels . Alle Screenshots von David Morelo.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert