Wie man Launchd verwendet, um Skripte auf dem Mac zu planen

Automatisierung von Aufgaben durch Planung von Skripten ist eine leistungsstarke Fähigkeit, auf die viele Administratoren täglich angewiesen sind. Auch reguläre Mac-Benutzer können diese Kraft nutzen, indem sie launchd verwenden, Apples bevorzugtes Tool für die Automatisierung und Verwaltung von Aufgaben unter macOS. Von der Planung einfacher Aufgaben wie dem Ausschalten von Wi-Fi zu einer bestimmten Stunde bis hin zu komplexen Systembackups kann launchd auf dem Mac Ihnen helfen, Ihre Arbeitsabläufe zu automatisieren, Zeit zu sparen und sicherzustellen, dass Ihr System genau so läuft, wie Sie es möchten.
Inhaltsverzeichnis
- Was ist Launchd?
- Daemons und Agents
- Skripte schreiben
- Jobbeschreibungen
- Jobs in launchctl laden
- Häufig gestellte Fragen
Was ist Launchd?
So wie ein Orchester einen Dirigenten benötigt, um die verschiedenen Instrumente zu leiten und zu harmonisieren, verlässt sich macOS Ventura mit seinen unzähligen Prozessen und Diensten auf launchd, um sicherzustellen, dass alles in perfektem Einklang spielt. Als der erste Prozess, der vom macOS-Kernel gestartet wird, wenn Sie Ihren Computer hochfahren, nimmt launchd die zentrale Bühne ein und orchestriert jeden nachfolgenden Prozess, Dienst und jede Anwendung, ähnlich wie ein Dirigent, der mit dem ersten Hebezeichen den Beginn einer Symphonie signalisiert.
Über seine Rolle in der Systemorchestrierung hinaus kann launchd verwendet werden, um Skripte zu planen, eine Reihe von Befehlen, die geschrieben wurden, um eine bestimmte Aufgabe auszuführen. Dies geschieht mit dem Befehl launchctl, der als Schnittstelle für Benutzer dient, um mit dem Dirigenten, der launchd ist, zu kommunizieren und ihn zu steuern.
Gut zu wissen: Torrents herunterladen? Steigern Sie die Effizienz, indem Sie Torrents mit dem Terminal auf Ihrem Mac herunterladen.
Daemons und Agents
launchd wird manchmal als Daemon bezeichnet, ein Computerprogramm, das als Hintergrundprozess läuft und typischerweise nicht dafür ausgelegt ist, direkt von einem Benutzer gesteuert zu werden. Was Daemons betrifft, ist launchd besonders, da es der Maestro aller anderen macOS-Daemons ist und entscheiden kann, wann sie starten und stoppen. Diese untergeordneten Daemons laufen unter dem Root-Benutzer, sodass sie so gut wie alles tun können.

Als Benutzer, der an der Planung von Aufgaben interessiert ist, ist es jedoch nicht immer wünschenswert oder notwendig, Skripte unter dem Root-Benutzer auszuführen. Hier kommen Agents ins Spiel. Agents laufen im Auftrag eines angemeldeten Benutzers, 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 ein Skript ausführen möchten, das Einstellungen ändert oder auf Dateien in Ihrem Konto zugreift, würden Sie einen Agenten verwenden.
Tipp: Haben Sie Kompatibilitätsprobleme mit einigen Ihrer Lieblings-Mac-Apps? Erfahren Sie, wie Sie 32-Bit-Linux auf einem alten Mac installieren.
Skripte schreiben
Um Agents oder Daemons über launchd auszuführen, müssen Sie einige Skripte schreiben. Die gängigste Skriptsprache ist bash. Wenn Sie mehr über bash-Skripting erfahren möchten, können Sie unseren Anfängerleitfaden zum bash-Skripting ansehen.

Ihre launchd-Skripte können an zwei verschiedenen Orten gespeichert werden, je nachdem, ob sie als Agents oder Daemons ausgeführt werden sollen:
- Für die Skripte, die als Agents gedacht sind und im Auftrag des angemeldeten Benutzers handeln, sollten sie in „~/Library/LaunchAgents“ gespeichert werden.
- Umgekehrt gehören Skripte, die als Daemons fungieren und systemweit unabhängig vom angemeldeten Benutzer arbeiten, in „/Library/LaunchDaemons“.
Denken Sie daran, dass Agents keine Root-Berechtigungen haben, sodass sie keine Aufgaben ausführen können, die tiefen Systemzugriff erfordern. Daemons hingegen laufen mit Root-Berechtigungen und können Aufgaben erledigen, die das gesamte System betreffen.
Gut zu wissen: Sie können die Kontrolle über Ihren Mac vertiefen, indem Sie den Root-Benutzer aktivieren, wodurch Sie auf das gesamte Dateisystem zugreifen können.
Jobbeschreibungen

Skripte in launchd werden durch Jobdefinitionen ausgelöst, die .plist-Dateien sind, die in bestimmten Verzeichnissen gespeichert sind. Diese XML-Dateien geben dem Job einen Namen, spezifizieren das Skript, das gestartet werden soll, und geben an, wann das Skript ausgeführt werden soll. Sobald Sie Ihr Skript geschrieben haben, schreiben Sie eine Jobdefinition und laden diese, die das Skript zur entsprechenden Zeit startet. Eine Jobdefinition sieht ungefähr so aus:
version="1.0"encoding="UTF-8"?>
version="1.0">
>
>Label>
>local.restart>
>Program>
>/Users/user/Scripts/restart.sh>
>RunAtLoad>
/>
>
>Ändern Sie es nach Bedarf und speichern Sie es in einer Textdatei mit der .plist-Erweiterung, bevor Sie es in das richtige Verzeichnis (siehe oben) ablegen.
Es gibt einige wichtige Teile der Jobbeschreibung:
- Label: der Name des Jobs innerhalb von launchd. Muss für jeden Job einzigartig sein. Diese werden in umgekehrter Domain-Notation geschrieben, und „local“ ist eine großartige Domain für private Agents.
- Program: der vollständige Pfad des Skripts, das diese Jobbeschreibung startet.
- RunAtLoad: beschreibt, wann das Skript ausgeführt werden soll. Es gibt hier einige verschiedene Optionen: - RunAtLoad: sofort ausführen, sobald die Jobdefinition geladen ist. Wird nur einmal pro Ladevorgang ausgeführt.
- StartInterval: den Job alle n Sekunden starten.
- StartCalendarInterval: den Job zu einem bestimmten Zeitpunkt und Datum ausführen.
Tipp: Brauchen Sie mehr Platz für diese Skriptdateien? Erfahren Sie, wie Sie den Cache auf Ihrem Mac leeren, um schnell Speicherplatz freizugeben.
Jobs in launchctl laden

Sobald Sie Ihre Skripte erstellt und Ihren Agenten am richtigen Ort gespeichert haben, müssen Sie ihn in launchctl laden. Dies geschieht in Zukunft automatisch bei Anmeldungen.
Um zu sehen, was derzeit in launchctl läuft, können Sie launchctl list im Terminal verwenden. Diese riesige Liste kann mit grep nach Ihrem Skript gefiltert werden, indem Sie es mit etwas wie Folgendem kennzeichnen:
launchctl list |grep local.restartUm ein Skript zu laden, öffnen Sie das Terminal und verwenden Sie den folgenden Befehl:
launchctl load ~/Library/LaunchAgents/local.restart.plistUm das Skript aus der launchctl-Warteschlange zu entfernen, verwenden Sie den Befehl unload:
launchctl unload ~/Library/LaunchAgents/local.restart.plistDas Laden eines Jobs stellt ihn in die launchd-Warteschlange, und der Job wird zur angegebenen Zeit gemäß seinen Startbedingungen ausgeführt. Wenn Sie ein Skript sofort ausführen möchten, egal was passiert, sollten Sie den Befehl „start“ verwenden:
launchctl start local.restartDieser Befehl nimmt das Label des Jobs und funktioniert nur, wenn der Job bereits in launchctl geladen wurde.
Tipp: Werden Sie ein Mac-Power-User, indem Sie Raycast oder Alfred verwenden, um schnell Ihre Lieblings-Apps zu starten.
Häufig gestellte Fragen
Wie kann ich überprüfen, ob launchd ein Skript gestartet hat?
Sie können den Befehl launchctl list im Terminal verwenden. Dies zeigt alle geladenen Jobs an. Um ein bestimmtes Skript oder einen Job zu finden, verwenden Sie grep, z.B. launchctl list | grep your_script_name.
Was ist, wenn launchd zu viele Systemressourcen verbraucht?
Wenn launchd übermäßige Ressourcen verbraucht, liegt das normalerweise an einem fehlerhaften Skript oder Job. Sie sollten die Skripte, die Sie kürzlich hinzugefügt haben, überprüfen und sie mit launchctl unload /path/to/job.plist entladen.
Was ist der Unterschied zwischen cron und launchd?
Sowohl cron als auch launchd sind Planungsdienste, aber sie funktionieren unterschiedlich. cron ist ein älterer, Unix-basierter Job-Planer, der Jobs zu festen Zeiten oder Intervallen ausführt, die in einer crontab-Datei definiert sind. launchd ist Apples neuere System für macOS, das Jobs basierend auf verschiedenen Auslösern starten kann – nicht nur Zeit.
Kann ich andere Skriptsprachen außer bash 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.