Post 753
Apple - OSX

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.