macOS: LaunchDaemon erstellen und automatisch starten
LaunchDaemons sind der macOS-native Weg, um Dienste und Skripte automatisch beim Systemstart zu laden – unabhängig davon, ob ein Benutzer angemeldet ist. Sie sind der Nachfolger der klassischen Init-Skripte und bieten deutlich mehr Kontrolle über Startbedingungen, Neustart-Verhalten und Ressourcen.
LaunchDaemon vs. LaunchAgent
macOS unterscheidet zwischen zwei Arten von Launch-Einheiten: LaunchDaemon (/Library/LaunchDaemons/) startet als Root beim Systemstart, ohne Benutzeranmeldung. LaunchAgent (/Library/LaunchAgents/ oder ~/Library/LaunchAgents/) startet erst bei Benutzeranmeldung im Benutzerkontext. Für Systemdienste ist LaunchDaemon die richtige Wahl.
Schritt 1: Property-List-Datei erstellen
Ein LaunchDaemon wird als .plist-Datei im XML-Format definiert. Hier ein Beispiel für ein Skript, das beim Start ausgeführt wird:
<?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>com.example.meinDienst</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/mein_skript.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/var/log/meinDienst.log</string>
<key>StandardErrorPath</key>
<string>/var/log/meinDienst_error.log</string>
</dict>
</plist>
Die Datei wird unter /Library/LaunchDaemons/com.example.meinDienst.plist gespeichert. Namenskonvention: Reverse-DNS-Stil, z.B. com.firmaname.dienst.
Schritt 2: Berechtigungen setzen
Plist-Dateien in /Library/LaunchDaemons/ müssen Root gehören und dürfen nicht group- oder world-writable sein:
sudo chown root:wheel /Library/LaunchDaemons/com.example.meinDienst.plist
sudo chmod 644 /Library/LaunchDaemons/com.example.meinDienst.plist
Schritt 3: LaunchDaemon laden
# Sofort laden (ohne Neustart)
sudo launchctl load /Library/LaunchDaemons/com.example.meinDienst.plist
# Ab macOS 10.11+: modernere Syntax
sudo launchctl bootstrap system /Library/LaunchDaemons/com.example.meinDienst.plist
Status prüfen und verwalten
# Status des Daemons anzeigen
sudo launchctl list | grep com.example
# Daemon stoppen
sudo launchctl stop com.example.meinDienst
# Daemon starten
sudo launchctl start com.example.meinDienst
# Daemon entladen (deaktivieren)
sudo launchctl unload /Library/LaunchDaemons/com.example.meinDienst.plist
Zeitgesteuert ausführen (cron-Ersatz)
LaunchDaemons können auch zeitgesteuert laufen – als Ersatz für cron. Beispiel: täglich um 3:00 Uhr:
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>3</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
Wer tiefer in macOS-Systemadministration einsteigen möchte, findet weitere Anleitungen in der Kategorie Apple & Mac. Das Linux-Äquivalent zu LaunchDaemons sind systemd-Units – beschrieben in der Linux & Server-Kategorie.


