12k
All articles

Halten Sie Ihren Mac für nächtliche Agent-Läufe mit caffeinate wach

Nutze caffeinate auf dem Mac, um Claude Code, Codex oder Builds über Nacht wach zu halten, Assertions mit pmset zu prüfen und Deckel-sleep zu beachten.

OpenReplay Team
OpenReplay Team
Halten Sie Ihren Mac für nächtliche Agent-Läufe mit caffeinate wach

caffeinate ist ein in macOS integriertes Kommandozeilenwerkzeug, das verhindert, dass Ihr Mac in den Ruhezustand wechselt, während eine Aufgabe ausgeführt wird — und die bei weitem nützlichste Form ist caffeinate -i <Ihr Befehl>, das einen Prozess einhüllt, das System für die gesamte Laufzeit wach hält und die Sperre automatisch freigibt, sobald der Prozess beendet wird. Wenn Sie Ihren Laptop-Deckel geschlossen oder den Rechner verlassen haben und festgestellt haben, dass ein nächtlicher Claude Code-, Codex- oder langer Build-Job abgebrochen wurde, ist dies die integrierte Lösung ohne Installation. Dieser Artikel behandelt die relevanten Flags, das bewährte Rezept für nächtliche Läufe, wie Sie überprüfen, ob die Assertion tatsächlich gehalten wird, und die eine harte Grenze, die caffeinate nicht überwinden kann.

Wichtigste Erkenntnisse

  • caffeinate ist seit OS X 10.8 Bestandteil von macOS, erfordert weder Installation noch Administratorrechte und erstellt eine IOKit-Power-Management-Assertion — denselben Mechanismus, den Apps wie Xcode verwenden, um einen Mac wach zu halten.
  • Verwenden Sie auf einem Laptop -i, um den Leerlauf-Ruhezustand zu verhindern; -s funktioniert nur bei Netzbetrieb und wird bei Akkubetrieb stillschweigend ignoriert, während -d das Display unnötigerweise eingeschaltet lässt.
  • Das Einhüllen eines Befehls (caffeinate -i npm run build) gibt die Assertion automatisch frei, wenn der Prozess beendet wird — Sie können also nicht vergessen, sie zu deaktivieren.
  • caffeinate allein hält ein MacBook mit geschlossenem Deckel nicht wach: Das Schließen des Deckels löst den Clamshell-Ruhezustand aus, den eine Software-Assertion bei Akkubetrieb nicht überwinden kann.
  • Führen Sie nächtliche Agents innerhalb von tmux aus, damit die Assertion auch bei einem geschlossenen oder abgestürzten Terminal-Fenster bestehen bleibt.

Was caffeinate auf dem Mac ist (die 10-Sekunden-Antwort)

caffeinate ist ein offiziell unterstütztes macOS-Kommandozeilenwerkzeug, das Power-Management-Assertions erstellt, um das Schlafverhalten zu steuern; es ist seit OS X 10.8 (2012) unter /usr/bin/caffeinate verfügbar und erfordert weder Installation noch Administratorrechte. Intern ruft es IOKits Power-Assertion-API auf — einen Mechanismus, der dynamisch ein bestimmtes Systemverhalten vom Power-Management-System anfordert — über IOPMAssertionCreateWithName, denselben offiziellen Weg, den Anwendungen nutzen, um einen Mac während aktiver Arbeit wach zu halten.

Das für lang laufende Jobs entscheidende Verhalten ist das Einhüllen. Wenn ein Hilfsprogramm angegeben wird, erstellt caffeinate die Assertions im Namen dieses Programms, und diese Assertions bleiben für die gesamte Ausführungsdauer bestehen; andernfalls erstellt caffeinate die Assertions direkt, und sie bleiben bestehen, bis caffeinate selbst beendet wird. Das kanonische Man-Page-Beispiel ist caffeinate -i make: caffeinate forkt einen Prozess, führt „make” darin aus und hält eine Assertion aufrecht, die den Leerlauf-Ruhezustand verhindert, solange dieser Prozess läuft.

Die relevanten caffeinate-Flags

Auf einem Laptop ist das einzig relevante Flag caffeinate -i: Es verhindert, dass das System in den Leerlauf-Ruhezustand wechselt, erlaubt dabei aber, dass das Display abdunkelt — genau das, was ein Hintergrund-Agent oder Build-Job benötigt. Der vollständige dokumentierte Flag-Satz ist umfangreicher, als die meisten Anleitungen eingestehen:

FlagVerhindertHinweise
-iLeerlauf-RuhezustandDer Standard für Entwickler; Display kann sich dennoch ausschalten
-dDisplay-RuhezustandHält den Bildschirm eingeschaltet — verschwendet Energie bei kopflosen Jobs
-mFestplatten-Leerlauf-RuhezustandSelten erforderlich für CPU/netzwerkgebundene Agents
-sSystem-RuhezustandNur bei Netzbetrieb
-uDeklariert BenutzeraktivitätEinmalig; setzt den Leerlauf-Timer zurück
-t NBeendet sich automatisch nach N Sekunden
-w pidHält die Assertion, bis die angegebene PID beendet wird

Zwei Details, die andere Anleitungen häufig falsch darstellen. Erstens ist die -s-Assertion nur gültig, wenn das System über Netzbetrieb läuft — bei Akkubetrieb wird sie stillschweigend ignoriert und ist daher die falsche Standardoption für einen nicht angeschlossenen Laptop. Zweitens: Wenn das Display ausgeschaltet ist, schaltet -u es ein und verhindert den Leerlauf-Ruhezustand; wird kein Timeout mit -t angegeben, gilt für diese Assertion standardmäßig ein Timeout von 5 Sekunden. Das Einhüllen einer Aufgabe ist sicherer als eine bloße Assertion, da sie den Job nicht überleben kann: caffeinate -i npm run build verhindert den Ruhezustand während des Builds und gibt die Sperre sofort nach dessen Abschluss frei.

Das Rezept für nächtliche Agent-Läufe

Um Claude Code, Codex CLI oder Aider über Nacht am Laufen zu halten, hüllen Sie den Startbefehl des Agents direkt ein und führen Sie ihn innerhalb eines Terminal-Multiplexers aus, damit nichts davon abhängt, dass Ihr Terminal-Fenster geöffnet bleibt. Da die Assertion innerhalb des caffeinate-Prozesses lebt, stirbt sie, wenn Terminal geschlossen wird oder abstürzt — tmux bietet echte Dauerhaftigkeit:

# Startet eine getrennte tmux-Session, die die Assertion für ihre gesamte Lebensdauer hält
tmux new-session -d -s agent 'caffeinate -i claude'

Wenn der Agent bereits in einem anderen Pane läuft, starten Sie ihn nicht neu — binden Sie stattdessen eine neue Assertion mit -w an seine bestehende Prozess-ID:

# PID ermitteln, dann die Assertion halten, bis dieser Prozess beendet wird
pgrep -f claude
caffeinate -i -w <pid>

Bevor Sie einen 8-stündigen Lauf sich selbst überlassen, vergewissern Sie sich, dass die Assertion tatsächlich gehalten wird. Führen Sie in einem zweiten Pane aus:

pmset -g assertions

Ein PreventUserIdleSystemSleep-Eintrag in dieser Ausgabe bestätigt, dass macOS nicht in den Leerlauf-Ruhezustand wechselt, während Ihr Job läuft; wenn der eingehüllte Befehl beendet wird, verschwindet die Zeile. Diese eine Diagnose ist der Unterschied zwischen Hoffen und Wissen, dass Ihr nächtlicher Lauf geschützt ist.

Kann caffeinate ein MacBook mit geschlossenem Deckel wach halten?

caffeinate allein hält ein MacBook mit geschlossenem Deckel nicht wach. Das Schließen des Deckels löst den Clamshell-Ruhezustand aus, und eine Software-Power-Assertion kann diesen bei Akkubetrieb nicht überwinden — Punkt. Dies ist die Grenze, die kein Keep-Awake-CLI-Tool überwinden kann, und der Grund, warum ein Job in dem Moment abbricht, in dem Sie den Laptop zuklappen und vom Stromnetz trennen.

Der Betrieb mit geschlossenem Deckel funktioniert in genau zwei offiziell unterstützten Fällen. Der erste ist Apples Clamshell-Modus: Apple unterstützt die Verwendung eines MacBooks mit geschlossenem Deckel durch Anschluss eines externen Displays, einer Tastatur und einer Maus, aber das Setup hat strenge Anforderungen — es funktioniert nicht ohne einen externen Monitor und kann thermische Kompromisse mit sich bringen. Apples empfohlenes Setup verbindet ein externes Display, ein Netzteil sowie eine externe Tastatur und Maus oder ein Trackpad. Der zweite Fall ist der Schalter in Systemeinstellungen → Batterie → Optionen: „Automatischen Ruhezustand verhindern, wenn das Display ausgeschaltet ist” — dieser erfordert jedoch, dass der Computer an eine Stromquelle angeschlossen ist und nicht vom Akku läuft, um wie vorgesehen zu funktionieren.

Wenn Sie tatsächlich Akkubetrieb und einen geschlossenen Deckel benötigen — ein Laptop in einer Tasche, der einen Agent ausführt — ist caffeinate das falsche Werkzeug. Amphetamine ist für genau diesen Fall konzipiert: Die Dokumentation besagt, dass Ihr Mac mit Amphetamine für den Closed-Display-Modus kein Display, keine Tastatur, keine Maus und kein Netzteil benötigt, da es eine öffentlich zugängliche API verwendet, um Apples Anforderungen zu deaktivieren.

Hier ist das vollständige Bild als Wahrheitstabelle:

Szenariocaffeinate -iBatterie > OptionenAmphetamine
Deckel offen, Leerlauf, AkkubetriebBleibt wachBleibt wachBleibt wach
Deckel geschlossen, AkkubetriebRuhezustandRuhezustandBleibt wach
Deckel geschlossen, Netzbetrieb + externes Display/TastaturBleibt wachBleibt wachBleibt wach
Terminal-Fenster wird geschlossen oder stürzt abAssertion erlischtNicht betroffenNicht betroffen
Eingehüllter Befehl wird beendetAutomatische FreigabeNicht betroffenSession läuft weiter

Beenden und Fallstricke

Beenden Sie caffeinate mit Ctrl+C im Vordergrund, oder lassen Sie es automatisch beenden, wenn der eingehüllte Befehl abgeschlossen ist — das Einhüll-Muster ist bewusst so gestaltet, dass es schwer ist, es versehentlich laufen zu lassen. Die Fehlermodi sind es wert, benannt zu werden. Ein bloßes caffeinate ohne eingehülltes Hilfsprogramm und ohne -t läuft, bis Sie es manuell beenden; einen Mac kontinuierlich wach zu lassen erhöht den Akkuverbrauch, steigert die Komponententemperaturen und verursacht über die Zeit zusätzliche SSD-Schreibvorgänge, begrenzen Sie die Assertion daher auf den jeweiligen Job. Und da die Assertion an den Prozess gebunden ist, wird sie sofort aufgehoben, wenn das Terminal-Fenster geschlossen wird oder abstürzt — was das zentrale Argument dafür ist, den Agent in tmux einzuhüllen, anstatt caffeinate einzutippen und zu hoffen, dass das Fenster die ganze Nacht geöffnet bleibt.

Wann Sie zu mehr greifen sollten

caffeinate ist das richtige Werkzeug, wenn Ihr Mac angeschlossen oder der Deckel geöffnet ist und Sie einen bestimmten nächtlichen Job mit automatischer Bereinigung schützen möchten. Wenn Sie Akkubetrieb mit geschlossenem Deckel benötigen, übergeben Sie an Amphetamine und seine sitzungsbasierten Steuerungen. Und wenn ein Build- oder Agent-Lauf schwer genug ist, um tagelang zu laufen, ist die sauberere Antwort oft, die Verwaltung des Energiezustands eines Laptops ganz aufzugeben und die Arbeitslast auf einen dauerhaft eingeschalteten Remote-Rechner zu verlagern — eine Maschine, die nie schläft, weil sie nie dafür ausgelegt war. Für den nächtlichen Betrieb auf dem eigenen Mac gilt: Hüllen Sie den Befehl ein, überprüfen Sie die Assertion mit pmset -g assertions, und gehen Sie schlafen.

Häufig gestellte Fragen

Was ist der Unterschied zwischen caffeinate -i und caffeinate -d?

Das Flag -i verhindert den Leerlauf-System-Ruhezustand und erlaubt dabei, dass das Display ausgeschaltet wird — genau das, was ein Hintergrund-Agent oder Build-Job benötigt und die richtige Standardeinstellung auf einem Laptop. Das Flag -d verhindert den Display-Ruhezustand, hält den Bildschirm eingeschaltet und verschwendet Energie bei einem kopflosen Job. Verwenden Sie -i für nächtliche Terminal-Arbeit und behalten Sie -d ausschließlich für Fälle vor, in denen das Display selbst eingeschaltet bleiben muss, etwa bei einem Monitoring-Dashboard.

Benötigt caffeinate sudo oder Administratorrechte?

Nein. caffeinate erfordert weder Installation noch Administratorrechte, da es IOKits öffentliche Power-Assertion-API verwendet — denselben offiziellen Mechanismus, den Anwendungen wie Xcode nutzen, um einen Mac wach zu halten. Jeder Benutzer kann es direkt aus dem Terminal ausführen. Es ist seit OS X 10.8 als integrierter Bestandteil von macOS unter /usr/bin/caffeinate verfügbar, sodass nichts installiert und keine erhöhten Berechtigungen erteilt werden müssen.

Was passiert mit caffeinate, wenn ich das Terminal-Fenster schließe?

Die Assertion erlischt sofort. Da die Power-Management-Assertion innerhalb des caffeinate-Prozesses lebt, beendet das Schließen oder Abstürzen des Terminal-Fensters diesen Prozess und hebt die Assertion auf, sodass der Mac in den Leerlauf-Ruhezustand wechseln kann. Um das Überleben eines geschlossenen oder abgestürzten Fensters zu gewährleisten, führen Sie den Job innerhalb von tmux aus, wobei caffeinate den Befehl innerhalb der Session einhüllt, sodass die Assertion an einen getrennten Prozess gebunden ist, der Ihr Terminal überdauert.

Wie lasse ich caffeinate nur für eine bestimmte Anzahl von Stunden laufen?

Verwenden Sie das Flag -t mit einem Timeout in Sekunden. Zum Beispiel verhindert caffeinate -i -t 28800 den Leerlauf-Ruhezustand für genau acht Stunden und beendet sich dann automatisch, wobei die Assertion freigegeben wird. Dies ist nützlich, wenn Sie ein festes Zeitfenster wünschen, anstatt die Assertion an die Lebensdauer eines bestimmten Befehls zu knüpfen. Ohne -t oder ein eingehülltes Hilfsprogramm läuft ein bloßes caffeinate, bis Sie es manuell mit Ctrl+C beenden.

Understand every bug

Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — self-hosted, with full data ownership.

Star on GitHub

We use cookies to improve your experience. By using our site, you accept cookies.