OpenClaw launchd : ThrottleInterval, KeepAlive et sondes de santé – matrice 2026 sur Mac mini loué
Les ingénieurs plateforme qui exécutent OpenClaw sous LaunchAgent sur un Mac mini Apple Silicon loué chez VmMac héritent de réglages subtils : ThrottleInterval masque les boucles de crash, KeepAlive ressuscite des processus empoisonnés, et la sémantique SuccessfulExit peut diverger des sorties Node pendant les mises à niveau. Cette matrice 2026 nomme des combinaisons sûres, explique les tempêtes de redémarrages faux positifs, décrit des sondes headless et relie l’observabilité à la parité Hong Kong, Japon, Corée, Singapour, États-Unis. Lisez aussi récupération de passerelle, isolation staging vs production et journaux structurés et rotation disque pour que les plist ne deviennent pas du bricolage.
Chemins de base : guide d’installation et de déploiement ; accès : aide ; hôtes canary dédiés : tarifs. Croisez les pics Spotlight/mds avec matrice d’indexation CI et disque avant d’incriminer OpenClaw.
Pourquoi la politique launchd prime sur la version binaire Node
Un semver OpenClaw parfait fond si launchd relance la passerelle toutes les 12 secondes parce que votre sonde confond latence LLM et mort. Les clés plist font partie du contrat SLA : elles définissent comment l’OS interprète succès, échec et backoff. Sans superviseur hyperviseur, launchd est le superviseur chez VmMac.
Les passerelles Node héritent de la sémantique des signaux macOS : SIGTERM pendant un déploiement doit fermer les serveurs HTTP, vider les journaux structurés et quitter avant que launchd n’escalade vers SIGKILL. Si le processus ignore SIGTERM car un WebSocket amont bloque, les shells interactifs voient des redémarrages manuels « réussis » tandis que les agents semblent instables. Documentez l’échelle de signaux attendue dans le même README que le pin Node LTS et répétez sur un mini VmMac jetable avant de toucher aux plist de prod.
ThrottleInterval ne remplace pas les correctifs de bugs—il ne change que le volume des échecs. Couplez le backoff OS à des disjoncteurs applicatifs pour qu’une configuration modèle empoisonnée ne sature pas le CPU dans toutes les régions. Par défaut, des chiffres identiques à Hong Kong, Tokyo, Séoul, Singapour et aux États-Unis ; exceptions écrites seulement pour expériences de latence.
- ThrottleInterval plafonne la fréquence de redémarrage mais peut masquer des pannes partielles durables.
- KeepAlive maintient les démons résidents mais complique le drain des mises à niveau.
- ExitTimeOut fixe le budget d’arrêt gracieux avant SIGKILL.
Matrice : ThrottleInterval vs KeepAlive vs ExitTimeOut
| Objectif | Levier principal | Risque | Atténuation |
|---|---|---|---|
| Stopper les boucles de crash | ThrottleInterval ≥ 30 s | Récupération lente après vrais crashs | Pager externe sur code de sortie |
| Passerelle toujours active | KeepAlive true + SuccessfulExit false | Respawn pendant un shutdown voulu | Label de maintenance séparé |
| Drain gracieux | ExitTimeOut 25–40 s | Shutdown bloqué retarde le restart | SIGKILL watchdog après budget |
| Éviter le troupeau après reboot | StartCalendarInterval échelonné ou sommeil aléatoire dans le wrapper | Préparation retardée vs pairs | Porte de santé sur dépendances, pas sur l’horloge |
Co-localisation avec d’autres agents launchd : envisagez Nice et LowPriorityIO pour qu’un expéditeur de logs n’affame pas la boucle d’événements de la passerelle. Ce n’est pas du dimensionnement, mais cela achète des minutes en incident partiel—souvent assez pour élargir ThrottleInterval délibérément.
Tempêtes de redémarrages faux positifs : symptômes et causes
Les tempêtes commencent souvent lorsque la santé frappe localhost avant que la passerelle n’ait lié les sockets après une pression disque qui retarde le chargement des modules. Autre motif : pics Spotlight/mds allongeant le cold start au-delà du timeout de sonde—corrélez avec politique d’indexation.
Flapping des dépendances : si la sonde teste un SaaS externe avant la disponibilité loopback, des micro-coupures de routage au Japon ou à Singapour marquent la passerelle malade alors que le processus est sain. Couchez les sondes : loopback d’abord, canary externe optionnel avec timeouts plus souples.
Disque plein : JSONL jusqu’à ENOSPC, sortie non nulle, KeepAlive relance, les journaux échouent aussitôt—parfois plus vite que ThrottleInterval ne refroidit le système. Miroitez les garde-fous disque de rotation des journaux structurés.
Sondes de santé headless sans VNC
Utilisez un petit wrapper qui curl le port santé sur loopback—désactiver la vérif TLS uniquement en loopback—ou mieux la sous-commande status CLI d’OpenClaw. Journalisez statut HTTP, ms de handshake TLS et PID après la sonde pour distinguer « processus vivant mais coincé » de « processus mort ».
Émettez un en-tête synthétique X-Probe-Trace-Id et faites-le répercuter dans les logs passerelle pour lier échecs de sonde et requêtes lentes. Cette corrélation résout plus de Sev2 que tout ajustement plist.
curl -fsS --max-time 3 http://127.0.0.1:18789/health || exit 1
Échelle d’ajustement en huit étapes pour 2026
- Capturer les codes de sortie de référence pendant sept jours avant toute plist.
- Fixer ThrottleInterval pour stopper tout motif sous 20 s.
- Aligner ExitTimeOut sur le SLA documenté d’arrêt gracieux.
- Ajouter des journaux structurés pour chaque raison de redémarrage.
- Canary 72 h dans une région VmMac.
- Comparer les redémarrages HK, JP, KR, SG, US.
- Documenter la plist de rollback dans le tag git
launchd-YYYYMMDD. - Game day trimestriel :
kill -9et mesurer la récupération.
Entre les étapes quatre et cinq, figez les features sur le label canary 72 h même si les métriques sont vertes—beaucoup de tempêtes n’apparaissent qu’avec le trafic du week-end. Capturez sample et footprint pendant la fenêtre canary pour les régressions mémoire inter-régions.
Lien avec les runbooks de récupération passerelle
Les articles de récupération décrivent quoi redémarrer ; cette matrice décrit quand l’OS doit redémarrer pour vous. Si les chiffres divergent, la confiance s’effrite et kill -9 devient habitude. Gardez les mêmes réglages numériques staging/prod selon isolation staging pour des promotions diffables.
Table d’observabilité : quoi journaliser par redémarrage
| Champ | But |
|---|---|
launchd_exit_status |
Distinction OOM vs sortie propre |
uptime_s |
Détecter la mortalité infantile |
rss_mb |
Corréler fuites avant SIGKILL |
fds_open |
Fuites de descripteurs amplifiées par keepalive |
last_http_5xx_ts |
Séparer pannes amont et mort locale |
Expédiez ces champs en JSONL vers le même réceptacle que les requêtes passerelle pour pivoter sans SSH sur chaque mini. Des noms cohérents à Hong Kong, au Japon, en Corée, à Singapour et aux États-Unis priment sur la cardinalité parfaite dès la première itération.
FAQ : launchd et OpenClaw sur Mac mini
LaunchDaemon plutôt que LaunchAgent ? Seulement après revue sécurité explicite—les agents héritent des frontières TCC utilisateur.
Tuner par région ? Uniquement avec exceptions écrites ; défaut = parité.
Mises à niveau ? Élargir temporairement ThrottleInterval pendant migrations npm.
SuccessfulExit false signifie-t-il toujours « redémarrer sur toute sortie » ? Effectivement pour la plupart des passerelles—associez des codes de sortie applicatifs drain vs crash.
Sondes en root ? Préférez le même utilisateur que la passerelle pour permissions et hypothèses TCC/trousseau.
Silencer les alertes en maintenance ? Fichier de maintenance lu par le wrapper, avec expiration automatique.
Pourquoi Mac mini M4 et VmMac conviennent aux passerelles toujours actives
Le Mac mini M4 offre assez de performance soutenue pour absorber des cold starts occasionnels sans déclencher des sondes agressives ; la mémoire unifiée réduit les flaps OOM vs VPS sur-souscrits. VmMac place les passerelles à Hong Kong, au Japon, en Corée, à Singapour et aux États-Unis près des utilisateurs et exigences de résidence des données—deuxième mini pour expérimenter les plist sans risquer la sémantique de redémarrage prod.
Louer raccourcit la boucle quand Apple livre des correctifs macOS qui modifient subtilement launchd : snapshot de la matrice plist, patch sur mini non-prod, rejouer le même harnais de santé avant d’impacter l’automatisation client. Moins cher qu’une astreinte nocturne pour politique de redémarrage non documentée.
Canary une nouvelle plist avant prod
Louez un Mac mini VmMac supplémentaire à Singapour ou Tokyo pour valider ThrottleInterval sans réveiller l’astreinte.