Gateway
Récupération après redémarrage
Le redémarrage du Gateway n’entraîne aucune perte de l’état des agents. Les conversations, les transcriptions, les tâches planifiées, les enregistrements des tâches en arrière-plan et les messages sortants en file d’attente sont tous conservés sur disque, et le travail interrompu en cours de tour est détecté et repris automatiquement une fois le Gateway de nouveau opérationnel. Aucune intervention manuelle n’est requise et il n’y a rien à configurer : la récupération est toujours active.
Cette page décrit ce qui subsiste après un redémarrage, comment le travail interrompu est détecté et comment se déroule la reprise automatique.
Ce qui subsiste après un redémarrage
| État | Stockage | Comportement après un redémarrage |
|---|---|---|
| Historique des conversations | Transcriptions JSONL + stockage de sessions par agent sur disque | Inchangé ; les sessions se poursuivent à partir de la transcription stockée |
| Tour de session principale interrompu | Marqueurs de récupération dans le stockage de sessions | Repris automatiquement quelques secondes après le démarrage |
| Exécutions de sous-agents | SQLite (base de données d’état partagée) | Registre restauré au démarrage ; exécutions interrompues reprises |
| Tâches en arrière-plan | SQLite (base de données d’état partagée) | Rapprochées au démarrage ; exécutions orphelines récupérées ou marquées comme perdues |
| Livraisons sortantes en file d’attente | File d’attente de livraison SQLite | Traitée après le redémarrage ; les réponses non livrées sont réessayées |
| Tâches planifiées (cron) | Stockage cron SQLite | Les planifications persistent ; le planificateur se réarme au démarrage |
| Poursuite après redémarrage | Sentinelle de redémarrage SQLite | Suivi ponctuel envoyé à la session ayant demandé le redémarrage |
Les redémarrages progressifs attendent d’abord la fin des opérations
Un redémarrage demandé (openclaw gateway restart, une modification de configuration nécessitant
un redémarrage ou une mise à jour du Gateway) n’interrompt pas immédiatement le travail en cours. Le
Gateway cesse d’accepter de nouvelles tâches, puis attend que les tours d’agent actifs et les
tâches en arrière-plan se terminent, dans la limite d’un délai d’attente (5 minutes par défaut). La plupart
des redémarrages n’interrompent donc aucun travail.
Seul le travail qui ne peut pas se terminer dans ce délai (ou toute exécution interrompue par un redémarrage forcé ou une panne) est abandonné — et avant cela, chaque session concernée est marquée pour récupération.
Détection du travail interrompu
Deux mécanismes complémentaires marquent les sessions dont le tour ne s’est pas terminé :
- À l’arrêt : pendant l’attente précédant le redémarrage, chaque session comportant une exécution active reçoit un marqueur de récupération dans le stockage de sessions avant que l’exécution ne soit abandonnée.
- Au démarrage : le Gateway analyse les stockages de sessions afin de repérer celles qui indiquent encore être en cours d’exécution, mais ne possèdent aucun propriétaire actif dans le nouveau processus. Cela permet de détecter les pannes brutales et les arrêts forcés pendant lesquels aucun code d’arrêt n’a été exécuté. Les fichiers de verrouillage obsolètes des transcriptions sont nettoyés simultanément.
Reprise automatique
Quelques secondes après le démarrage, le Gateway renvoie chaque session marquée avec un message système synthétique indiquant à l’agent que son tour précédent a été interrompu par un redémarrage et qu’il doit reprendre à partir de la transcription existante. Si une réponse finale avait déjà été produite, mais pas livrée, son texte est inclus afin que l’agent puisse la transmettre au lieu de recommencer le travail. La récupération effectue jusqu’à 3 tentatives avec temporisation exponentielle.
Avant la reprise, le Gateway vérifie que la fin de la transcription permet de continuer en toute sécurité. Si ce n’est pas le cas (par exemple, si le tour s’est terminé sur une approbation en attente obsolète), la session n’est pas réexécutée à l’aveugle ; l’agent publie plutôt une brève notification demandant à l’utilisateur de renvoyer sa dernière requête.
OpenClaw peut également reconstruire les travaux Code Mode
interrompus et accessibles en lecture seule. Code Mode marque ces exécutions comme compatibles avec les redémarrages et rejette les outils
du catalogue produisant des effets de bord ou les espaces de noms de plugins avant leur exécution. Si un redémarrage survient sur
la commande wait, le nouveau Gateway reconstruit le tour à partir de sa transcription
et impose que l’exécution reconstruite reste compatible avec les redémarrages, même si le
modèle omet ou désactive cet indicateur. L’hôte limite l’intégralité du tour reconstruit
aux outils principaux audités en lecture seule et aux outils de plugins explicitement sûrs pour la réexécution,
y compris lorsque Code Mode est désactivé après le redémarrage. Le travail produisant des effets de bord
reste protégé par la notification de renvoi afin de ne pas risquer une écriture en double.
Sous-agents
Les exécutions de sous-agents sont conservées dans la base de données d’état SQLite partagée, de sorte que le registre des sous-agents subsiste après l’arrêt du processus. Au démarrage, le registre est restauré et les sessions de sous-agents interrompues sont reprises avec le contexte de leur tâche d’origine. Deux mécanismes de sécurité s’appliquent :
- Les exécutions interrompues il y a plus de 2 heures sont finalisées au lieu d’être reprises, afin qu’un Gateway resté arrêté pendant la nuit ne réactive pas un travail obsolète.
- Une session dont la récupération échoue à plusieurs reprises est marquée par une pierre tombale comme bloquée afin que la récupération ne puisse pas boucler indéfiniment.
Tâches en arrière-plan
Le registre des tâches en arrière-plan repose sur SQLite et fait l’objet d’un rapprochement au démarrage ainsi qu’à intervalles réguliers : les résultats durables enregistrés par les exécutions terminées sont récupérés, et les exécutions dont le processus propriétaire a disparu sont marquées comme perdues après un délai de grâce au lieu de rester indéfiniment suspendues.
Redémarrages demandés par l’agent
Lorsque l’agent déclenche lui-même un redémarrage (pour appliquer une modification de configuration, mettre à jour le Gateway ou répondre à une demande explicite de redémarrage), une sentinelle de redémarrage est écrite dans SQLite avant l’arrêt du processus. Après le démarrage, le Gateway publie le résultat dans la discussion d’origine et lance un tour de continuation ponctuel afin que l’agent reprenne exactement là où il s’était arrêté, dans le même canal et le même fil.
Mécanismes de sécurité et observabilité
- Disjoncteur de boucle de panne : 3 démarrages non propres en 5 minutes déclenchent un disjoncteur qui empêche le démarrage automatique des services annexes lors du démarrage suivant, afin qu’un Gateway en panne n’amplifie pas le problème. Le fonctionnement normal reprend une fois la fenêtre des démarrages non propres écoulée.
- Métriques : l’activité de récupération est exportée par l’intermédiaire de
Prometheus sous les noms
openclaw_session_recovery_totaletopenclaw_session_recovery_age_seconds. - Journaux : les décisions de récupération sont consignées dans les sous-systèmes
main-session-restart-recoveryetsubagent-interrupted-resume.
Ce qui n’est pas repris
- Les sessions exclues de la récupération de session principale parce qu’un autre propriétaire les gère déjà : les sessions de sous-agents (récupération des sous-agents), les sessions cron (le planificateur les réexécute conformément à la planification) et les sessions gérées par ACP (l’IDE ou le client connecté prend en charge la reprise).
- Les sessions dont la fin de transcription ne permet pas de continuer en toute sécurité ; elles reçoivent la notification de renvoi décrite ci-dessus au lieu d’être réexécutées silencieusement.
- Le travail qui n’a jamais été accepté : les messages arrivant pendant la période d’attente sont rejetés avec une erreur explicite de redémarrage au lieu d’être silencieusement placés dans la file d’attente d’un processus en cours d’arrêt.