2026-05-15 OpenClaw LaunchAgent ThrottleInterval, KeepAlive und SuccessfulExit auf gemieteter ProxyMac Mac mini: Crash-Loops nicht als Modellausfall fehldeuten
Teams, die OpenClaw als LaunchAgent auf gemieteten Mac mini M4 in Hongkong, Japan, Südkorea, Singapur oder den USA betreiben, kennen das Muster: Das Gateway beendet sich, launchd startet es in unter einer Sekunde neu, Provider liefern 429 oder leere Streams, und alle geben dem „Modell“ die Schuld. Dieser Artikel richtet sich an Betrieb und Plattformteams und liefert (1) Zielgruppen- und Quantenschwellen, (2) die Trennung von Crash-Loops und providerseitigem Throttling, (3) eine vierzeilige Entscheidungsmatrix für ThrottleInterval, KeepAlive und SuccessfulExit, (4) ein Neun-Schritte-Runbook im Einklang mit Neustart-Recovery und Dev/Staging/Prod-Isolierung, (5) eine Szenario-Tabelle für HTTP-429-Bursts sowie (6) Fallstricke bei ThrottleInterval 0. Ergänzend lesen: ulimits & Speicher, unbeaufsichtigte Jobs, HTTP-Proxy im plist. SKUs unter Preise, Incident-Vorlagen unter Hilfe, einmalige GUI-Vertrauensdialoge über VNC.
Wer ThrottleInterval und KeepAlive für OpenClaw zwingend justieren muss
Beginnen Sie bei Flotten, in denen das Gateway aus Gründen beendet wird, die nichts mit Modellqualität zu tun haben—defekte JSON-Konfiguration, MCP-Kind-Segfaults, TLS-MITM-Rotation oder verschwindende Token-Dateien mitten im Deploy. Fehlt ThrottleInterval im LaunchAgent-plist, erlaubt macOS oft extrem enge Respawn-Schleifen, die schneller inferieren als jeder SSH-Operator manuell retryt. Umgekehrt: KeepAlive ohne klare Exit-Semantik kann einen „erfolgreichen“ Wartungsstopp sofort wieder aufwecken.
- Quantenschwelle: Wenn
log show --predicate 'process == "launchd"' --last 15mmehr als 12 Startevents für dasselbe Label zeigt, sind Sie im Crash-Loop-Bereich. - Provider-Schwelle: Korrelieren 429-Antworten mit Neustart-Zeitstempeln innerhalb von ±5 s, drosseln Sie zuerst automatische Relaunches, bevor Sie Modelltemperaturen anfassen.
- Isolierungsschwelle: Mehrere Umgebungen dürfen kein plist-Label teilen—vor Throttle-Änderungen die Ein-Umgebung-ein-Label-Disziplin aus dem Isolierungsartikel erzwingen.
Symptome: Crash-Loops vs. providerseitiges Throttling
Crash-Loops zeigen häufig Sägezahn-CPU: 0 % Leerlauf, 180 % für etwa acht Sekunden beim OpenClaw-Start, harter Exit, Wiederholung. Provider-Throttling zeigt stabileren CPU-Verlauf mit Logzeilen zu retry-after oder exponentiellen Backoff-Hinweisen. JSONL mit identischen ersten Kopfzeilen in dutzenden Dateien deutet darauf hin, dass der Prozess nie den Steady State erreicht. Bevor Sie beim Modellanbieter ein Ticket öffnen, gleichen Sie Neustart-Kadenz mit plist-Zeitstempeln über stat -f '%m' ~/Library/LaunchAgents/com.example.openclaw.plist ab und vergleichen Sie mit Mustern aus JSONL-Diagnostik.
launchctl print, (2) HTTP-Status-Histogramm aus Gateway-Logs, (3) MCP-Kind-Exit-Codes—wenn MCP stabil ist und HTTP 429-lastig, zuerst Relaunches drosseln.
Entscheidungsmatrix: ThrottleInterval vs. KeepAlive vs. SuccessfulExit
| Schalter | Steuert | Wann erhöhen / aktivieren | Hauptgefahr bei Fehlsetzung |
|---|---|---|---|
ThrottleInterval (Sekunden) |
Mindestabstand zwischen automatischen Neustarts nach Exit | Nach 429-Stürmen oder wackeligem MCP während Rollouts | Zu hoch maskiert echte Recovery während Vorfällen |
KeepAlive true |
Respawn bei Job-Exit (je nach plist-Semantik) | Lang laufende Gateways, die Reboots überleben müssen | Unendliches Respawn ohne Drossel verbrennt Kontingente |
SuccessfulExit false |
Exit 0 als Erfolg behandeln, der keinen automatischen Neustart auslösen soll | Wartungsfenster mit Sentinel-Skripten | Falsches Bool lässt Zombie-Restart-Schleifen bestehen |
Manuelles launchctl kickstart -k |
Operatorgesteuerter Neustart außerhalb der Throttle-Kadenz | Kontrolliertes Deploy nach plist-Validierung | Automation, die kickstart engmaschig ruft, reproduziert den Sturm |
Neun-Schritte-Stabilisierungs-Runbook
- Label-Audit: Nur ein plist besitzt Prod-OpenClaw gemäß Umgebungsisolierung.
- Exit-Stürme erfassen: Letzte 200 Zeilen unified log, gefiltert nach Label, exportieren.
- Baseline-Throttle: In Dev 10 Sekunden starten, in Prod nach erstem 429-Cluster 30 Sekunden.
- SuccessfulExit definieren: Exit 0 für Graceful-Shutdown-Skripte während Upgrades dokumentieren.
- Speicherdeckel abstimmen: Mit ulimit-Artikel, damit OOMs nicht als Netzwerkfehler maskieren.
- Webhook-Dämpfung: Bei Slack-Webhooks Alarme entprellen, solange Throttle den Prozess kühlt.
- Fehlerinjektion: Kurz eine nicht-geheime Konfigurationsdatei verschieben und prüfen, ob der Neustartabstand ThrottleInterval einhält.
- Soak: 45 Minuten synthetischer Traffic bei 40 % Peak-Parallelität, um versteckte externe Watchdogs zu finden, die doppelt starten.
- Postmortem: plist-Diff und Neustart-Histogramm im selben Git wie Konfig-Versionierung ablegen.
ThrottleInterval auf 0 setzen auf geteilten Miet-Minis mit Produktions-API-Schlüsseln—Ihr Crash wird zur Rate-Limit-Geschichte aller.
Szenario-Tabelle: HTTP-429-Bursts vs. launchd-Verhalten
| Szenario | Beobachtbares Muster | Erster Hebel |
|---|---|---|
| MCP-Segfault-Schleife | Exit-Code 139 alle 2–4 s | ThrottleInterval auf 30; MCP-Binary-Pfad fixen |
| Token-Datei-Race beim Deploy | 6 Zyklen Exit 78, dann Erfolg | Deploy-Mutex hinzufügen; ThrottleInterval ≥ 15 |
| Globaler Provider-Throttle | 429 mit Retry-After: 60 |
ThrottleInterval ≥ 60; parallele Agenten reduzieren |
Bug im Operator-kickstart -k-Skript |
Start alle 60 s unabhängig vom Health | cron-Wrapper entfernen; KeepAlive + Health-Probe nutzen |
Fallstricke: ThrottleInterval bei null und doppelte Watchdogs
Manche kopierten plists erben ThrottleInterval 0 aus Vorlagen für interaktive Daemons. OpenClaw plus aggressives KeepAlive erzeugt dann Sub-Sekunden-Restart-Stürme, die Dateideskriptoren schneller erschöpfen als ulimits erlauben—sichtbar als MCP-24-Fehler ohne Tool-Logikfehler. Ein zweiter Fallstrick: externer cron ruft parallel launchctl kickstart auf, während KeepAlive true ist—doppelte Starts in gesunden Phasen. Wählen Sie eine Überwachungsschicht.
defaults read /path/to.plist ThrottleInterval
FAQ
Verlangsamt ThrottleInterval reguläre Deployments? Es begrenzt nur die minimale Wanduhrzeit zwischen automatischen Neustarts nach Exit. Manuelle launchctl kickstart-Aufrufe durch Operatoren unterliegen nicht diesem Throttle.
Sollte KeepAlive während Canary-Upgrades true sein? Für langlebige Gateways oft ja, aber immer mit ThrottleInterval koppeln; Canary nutzt ein separates plist-Label wie in den Isolierungsleitfäden beschrieben.
Welcher Exit-Code gehört in SuccessfulExit für Wartungsstopps? Der Sentinel Ihres Wrappers—häufig 0 für Graceful Shutdown—neben der plist dokumentieren.
Warum ProxyMac Mac mini der richtige Ort für launchd-Neustart-Disziplin ist
Gemietete Mac mini M4 bieten vorhersagbare Single-Tenant-CPU, um thermisches Throttling von Restart-Stürmen zu trennen, natives macOS-syslog wie auf vertrauten Laptops und Regionswahl in HK / JP / KR / SG / US, damit Latenztests realen Nutzerbasen nahekommen. Nach validierter Throttle-Mathematik promoten Sie dieselben plist-Snippets über transparente Preise auf eine zweite Mini, statt auf geteilten CI-Runnern zu raten, die launchd-Semantik verbergen.
OpenClaw launchd härten, bevor Kontingente beißen
ThrottleInterval · KeepAlive · HK / JP / KR / SG / US