launchctl — Dienste und Daemons mit launchd steuern
Praxis-Guide zu launchctl — Daemons und Agents unter macOS laden, starten, stoppen und mit moderner bootstrap/bootout-Syntax verwalten.
launchctl ist das Kommandozeilen-Werkzeug, mit dem du launchd steuerst – den zentralen Dienst-Manager von macOS, der Daemons und Agents lädt, startet und stoppt. Dienste werden über Property-List-Dateien (plists) in den LaunchDaemons- und LaunchAgents-Verzeichnissen beschrieben; launchctl meldet sie an, entlädt sie wieder und zeigt dir ihren Status. Dieser Guide führt dich durch die wichtigsten Befehle – von der Status-Abfrage über das moderne bootstrap/bootout bis zum Aktivieren beim Systemstart.
Auflisten & Informationen
launchctl list — Listet alle geladenen Dienste des aktuellen Benutzers auf.
launchctl listlaunchctl list | grep <name> — Sucht nach einem bestimmten Dienst.
launchctl list | grep sshlaunchctl print system/<label> — Zeigt Detailinfos zu einem Systemdienst.
sudo launchctl print system/com.apple.sshdlaunchctl print gui/$(id -u)/<label> — Zeigt Detailinfos zu einem Benutzerdienst.
launchctl print gui/$(id -u)/com.apple.Spotlightlaunchctl blame system/<label> — Zeigt, warum ein Dienst läuft oder nicht.
sudo launchctl blame system/com.apple.sshdStarten & Stoppen (modern)
launchctl bootstrap system <plist> — Lädt und registriert einen System-Daemon.
sudo launchctl bootstrap system /Library/LaunchDaemons/com.example.myservice.plistlaunchctl bootout system/<label> — Entlädt und deregistriert einen System-Daemon.
sudo launchctl bootout system/com.example.myservicelaunchctl bootstrap gui/$(id -u) <plist> — Lädt einen Benutzer-Agent.
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.example.myagent.plistlaunchctl bootout gui/$(id -u)/<label> — Entlädt einen Benutzer-Agent.
launchctl bootout gui/$(id -u)/com.example.myagentlaunchctl kickstart -k system/<label> — Erzwingt den Neustart eines Dienstes (beenden und neu starten).
sudo launchctl kickstart -k system/com.apple.sshdlaunchctl kickstart -p system/<label> — Startet einen Dienst, falls er nicht läuft.
sudo launchctl kickstart -p system/com.example.myserviceVeraltete Befehle
launchctl load <plist> — Lädt einen Dienst (veraltet, nutze stattdessen bootstrap).
launchctl load ~/Library/LaunchAgents/com.example.myagent.plistlaunchctl unload <plist> — Entlädt einen Dienst (veraltet, nutze stattdessen bootout).
launchctl unload ~/Library/LaunchAgents/com.example.myagent.plistlaunchctl load -w <plist> — Lädt einen Dienst und aktiviert ihn dauerhaft.
launchctl load -w ~/Library/LaunchAgents/com.example.myagent.plistlaunchctl unload -w <plist> — Entlädt einen Dienst und deaktiviert ihn dauerhaft.
launchctl unload -w ~/Library/LaunchAgents/com.example.myagent.plistlaunchctl start <label> — Startet einen bereits geladenen Dienst.
launchctl start com.example.myagentlaunchctl stop <label> — Stoppt einen laufenden Dienst.
launchctl stop com.example.myagentAktivieren & Deaktivieren
launchctl enable system/<label> — Aktiviert einen Systemdienst für den Start beim Booten.
sudo launchctl enable system/com.example.myservicelaunchctl disable system/<label> — Deaktiviert den Start eines Systemdienstes beim Booten.
sudo launchctl disable system/com.example.myservicelaunchctl enable gui/$(id -u)/<label> — Aktiviert einen Benutzer-Agent für den Start bei der Anmeldung.
launchctl enable gui/$(id -u)/com.example.myagentlaunchctl disable gui/$(id -u)/<label> — Deaktiviert den Start eines Benutzer-Agents bei der Anmeldung.
launchctl disable gui/$(id -u)/com.example.myagentplist-Speicherorte
~/Library/LaunchAgents/ — Benutzer-Agents: laufen, wenn sich der Benutzer anmeldet.
ls ~/Library/LaunchAgents//Library/LaunchAgents/ — Globale Agents: laufen für alle Benutzer bei der Anmeldung.
ls /Library/LaunchAgents//Library/LaunchDaemons/ — Globale Daemons: laufen beim Booten (als root).
ls /Library/LaunchDaemons//System/Library/LaunchDaemons/ — System-Daemons (Apple, nicht verändern).
ls /System/Library/LaunchDaemons/ Fazit
launchctl bündelt die komplette Dienst-Steuerung von macOS in einem Befehl – vom schnellen launchctl list bis zum gezielten Neustart einzelner Daemons. Setze im Alltag auf die moderne Syntax mit bootstrap und bootout; das alte load/unload funktioniert zwar noch, gilt aber als veraltet und kennt die Domain-Trennung (system, gui, user) nicht. Für die System-Domain brauchst du sudo, und genau dort ist Vorsicht geboten: Ein bootout oder disable auf einem Apple-Daemon kann zentrale macOS-Funktionen lahmlegen – fass die plists unter /System/Library/LaunchDaemons/ daher nicht an. Verhält sich ein Dienst merkwürdig, führt dich launchctl blame oft schneller zur Ursache als jeder Logdurchlauf.
Weiterführende Links
- launchd – Apple Developer Documentation – offizielle Anleitung zum Erstellen von Daemons und Agents (englisch)
- launchctl(1) – Befehlsreferenz – Übersicht aller Subkommandos und Optionen (englisch)
Verwandte Kommandos
- caffeinate – verhindert, dass der Mac in den Ruhezustand wechselt
- defaults – liest und schreibt macOS-Einstellungen in plists
- diskutil – verwaltet Festplatten, Volumes und Partitionen