Frontière IA

Passerelle OpenClaw 2026 : arrêt gracieux, sondes de readiness, délais de drainage bornés, achèvement des outils, alignement load balancer, fenêtre SIGTERM LaunchAgent et répétition macOS sur Mac mini cloud

MacHTML Lab2026.04.27env. 33 min

Les bascules bleu/vert et les mises à jour hebdomadaires de dépendances ne restent « ennuyeuses » que si votre passerelle OpenClaw peut disparaître sans tronquer des appels d’outils à mi-chemin. En 2026, les opérateurs attendent un chemin d’arrêt gracieux calqué sur le cloud natif : inverser la readiness pour que les équilibreurs cessent de router du trafic neuf, arrêter la boucle d’acceptation, drainer les invocations HTTP et streaming sous délais explicites, puis quitter avec le code zéro après flush des métriques et journaux. Cet article clarifie readiness contre liveness, comment borner les fenêtres de drainage sans affamer de longs exports CRM, comment l’arrêt s’articule avec les disjoncteurs et les files poison (DLQ), comment la diagnostic des timeouts de lecture s’aligne, et comment la surveillance de santé expose l’état « draining » aux sondes synthétiques.

Ancre prix : répéter la chorégraphie SIGTERM sur un Mac mini dédié MacHTML à environ 16,9 $ par jour coûte moins cher qu’un déploiement où launchd escalade vers SIGKILL après ~30 secondes alors que douze appels d’outils retiennent encore des verrous base de données.

Signaux, ExitTimeout launchd et valeurs par défaut

Sous macOS, launchd envoie SIGTERM lors d’un launchctl bootout ou quand une mise à jour de dépendance redémarre le job. Sans ExitTimeout relevé, SIGKILL suit après une grâce plateforme—souvent ~30 s dans beaucoup de modèles, mais vérifiez avec launchctl print gui/$UID/votre.plist. Les conteneurs Linux diffèrent ; mélanger les flottes sans répétition garantit des surprises.

Installez des gestionnaires de signaux qui lèvent un drapeau atomique shutting_down, ferment les keep-alive inactifs et démarrent un minuteur de drain thread-safe. Évitez le lourd travail dans le handler : enqueue vers la boucle principale pour préserver TLS.

Documentez budget externe (ce que croit l’équilibreur) et interne (ce dont le pool a besoin). Si interne > externe, allongez le délai de désenregistrement ou réduisez d’abord les timeouts d’outils.

Les équipes françaises soumises à des fenêtres de maintenance nocturne doivent synchroniser ces secondes avec les contrats SLA clients : un drain propre qui dépasse la fenêtre affichée sur le statut page nuit à la confiance autant qu’un crash brutal.

Readiness contre liveness pendant le drain

La liveness reste vraie tant que le processus progresse ; la readiness doit passer à faux dès que vous refusez du travail neuf. Les inversions par commodité provoquent des cascades : le front continue de placer des sessions sur un hôte qui ne devrait plus en accepter.

Exposez /readyz renvoyant 503 avec JSON {"draining":true,"in_flight":14,"deadline_ms":12000} pour tracer des courbes. Croisez avec la surveillance de santé de passerelle.

Les product managers aiment les graphiques superposant campagnes marketing et pics in_flight : cela explique visuellement pourquoi un vendredi après-midi est plus risqué pour un rollout.

Arrêter l’acceptation sans tempêtes de réinitialisation

Fermer brutalement le socket d’écoute peut RST des poignées de main TLS en cours. Préférez un portail applicatif répondant 503 et Retry-After: 5 pendant que les connexions existantes terminent leur requête courante. HTTP/2 exige une séquence GOAWAY prudente : annoncer flux max zéro, attendre les flux ouverts, puis fermer.

Pour les ponts WebSocket outils, message applicatif server_shutdown et indice de backoff client avant fermeture pour éviter le troupeau vers le pod suivant.

Vérifiez aussi les timeouts des proxies managés : un idle plus court que votre drain peut couper des keep-alive « sains » et déclencher des retries prématurés.

Pools de workers, délais par outil et streaming

Répartissez le budget : par exemple 60 % pour REST standard, 30 % pour long-poll/streaming, 10 % pour hooks admin. Si un locataire monopolise, maintenez des plafonds par locataire même en drain.

Streaming modèle actif : pas de nouveaux tours, mais la pompe SSE courante jusqu’à fin d’octets ou sous-limite 20 s. Journalisez SHUTDOWN_TRUNCATED_STREAM pour ajuster les prompts.

Les intégrations CRM françaises souvent sérialisées peuvent exploser la médiane de durée : instrumentez par nom d’outil pour prioriser les optimisations.

Équilibreurs et Retry-After

Après le flip readiness, attendez au moins une période de sonde—souvent 5 s—avant d’arrêter l’acceptation. Multi-région : TTL DNS pour retardataires. Retry-After cohérent avec l’histoire d’idempotence SDK.

Pass-through L4 : HTTP/1.1 keep-alive peut porter de nouvelles requêtes ; compteur de génération par connexion pour répondre Connection: close aux nouvelles requêtes post-drain sur vieux sockets tout en finissant la requête active.

Si votre fournisseur cloud facture à la minute, incluez le coût des drains prolongés dans le modèle économique du runbook.

Métriques, journaux et audits post-arrêt

Jauge gateway_in_flight_total, compteur gateway_shutdown_events_total{result} (clean, deadline_exceeded, forced_kill), histogramme gateway_shutdown_duration_seconds du flip readiness à la sortie processus pour juger si 45 s restent réalistes semaine après semaine.

Journaux structurés : grâce configurée équivalente Kubernetes, pic in_flight, outil le plus lent. Archivez à côté des tickets de déploiement.

Alertez si clean < 99 % sur sept jours avec fréquence de déploiement en hausse.

Les audits RGPD peuvent exiger la preuve qu’aucune demi-requête sensible n’a été abandonnée ; vos séries temporelles deviennent une pièce à conviction technique.

Poids canary lors de redémarrages roulants

Les redémarrages roulants multiplient les arrêts. Limitez les instances en drain simultané à 20 % sans preuve de marge via trafic synthétique.

Rollback automatique si taux 5xx cinq minutes > 1 % pendant qu’une instance annonce draining : revenir à la table de poids saine et pager le propriétaire du déploiement.

Les canaries qui ne regardent que le HTTP statut manquent souvent les appels d’outils semi-ouverts ; croisez avec des métier-KPI.

Coordination avec disjoncteurs

Pendant le drain, vous voulez moins de sondes, pas plus. Ajustez les disjoncteurs : intervalles half-open plus longs ou disjoncteurs ouverts sur dépendances déjà malades.

Producteurs DLQ et enqueue idempotent

Si l’arrêt course avec des handlers d’erreur qui enqueuent vers la DLQ, l’enqueue doit être idempotent. Sinon retry TCP sans idempotence duplique. Voir conception DLQ pour les champs d’enveloppe survivant à la sortie du processus.

Matrice : arrêt brutal versus drain gracieux

ScénarioSIGKILL brutalDrain gracieux
Transaction DB en coursRisque commit partielAttente ou hook rollback explicite
Jetons modèle streamésPhrase coupéeAttente bornée + drapeau troncature
Latence de déploiementplus courtetypiquement +5–45 s
Confiance opérationnellefaibleélevée si métriques prouvent le drain

Check-list de déploiement numérotée

  1. Tableau de bord pour JSON de drain sur /readyz.
  2. Aligner ExitTimeout sur la math interne + 10 s de marge.
  3. Test d’intégration SIGTERM avec ≥ 50 appels d’outils synthétiques.
  4. Vérifier l’ordre GOAWAY HTTP/2 sous charge (h2load).
  5. Modèle de post-mortem avec pièce jointe CSV de chronologie de drain.

FAQ

systemd KillMode influence-t-il OpenClaw ?

Sur flottes mixtes, documentez mixed contre control-group pour savoir quels enfants reçoivent les signaux.

Peut-on drainer indéfiniment ?

Non : un drain infini masque des workers bloqués. Utilisez la diagnostic de blocage.

Les portables Windows des devs comptent-ils ?

Seulement si vous expédiez des passerelles Windows ; la répétition macOS reste pertinente pour les partenaires MacBook.

Enfin, les équipes qui instrumentent déjà OpenTelemetry devraient propager un attribut drain.phase sur les traces actives au moment du flip readiness : lors d’un post-mortem, vous verrez immédiatement quels spans outils ont été coupés par la fenêtre ExitTimeout plutôt que par une erreur métier, ce qui évite de confondre une régression produit avec une simple contrainte d’orchestration.

L’arrêt gracieux est le point où la culture fiabilité rencontre des secondes mesurables. Un Mac mini loué chez MacHTML pour environ 16,9 $/jour offre le comportement de signaux macOS natif, la marge Apple Silicon pour les tests de soak et SSH/VNC pour observer les chronologies launchd avant le trafic client.

Répéter l’arrêt passerelle OpenClaw sur Mac mini cloud

ExitTimeout, modes d’échec h2load et bascules readiness sur pile réseau macOS réelle avant bascule bleu/vert.

Entraîner un arrêt propre
dès 16,9 $/jour