Outil Exec d'arrière-plan et de processus
Outil Exec d’arrière-plan et de processus
Section intitulée « Outil Exec d’arrière-plan et de processus »OpenClaw exécute des commandes shell via l’outil exec et conserve les tâches de longue durée en mémoire. L’outil process gère ces sessions d’arrière-plan.
outil exec
Section intitulée « outil exec »Paramètres clés :
command(requis)yieldMs(défaut 10000) : passage automatique en arrière-plan après ce délaibackground(booléen) : passage immédiat en arrière-plantimeout(secondes, défaut 1800) : tuer le processus après ce délai d’attenteelevated(booléen) : exécuter sur l’hôte si le mode élevé est activé/autorisé- Besoin d’un vrai TTY ? Définissez
pty: true. workdir,env
Comportement :
- Les exécutions au premier plan renvoient directement la sortie.
- Lorsqu’il est en arrière-plan (explicite ou délai d’attente), l’outil renvoie
status: "running"+sessionIdet une courte fin. - La sortie est conservée en mémoire jusqu’à ce que la session soit interrogée ou effacée.
- Si l’outil
processn’est pas autorisé,execs’exécute de manière synchrone et ignoreyieldMs/background. - Les commandes exec générées reçoivent
OPENCLAW_SHELL=execpour les règles de shell/profil contextuelles.
Pontage des processus enfants
Section intitulée « Pontage des processus enfants »Lors de la génération de processus enfants de longue durée en dehors des outils exec/process (par exemple, les redémarrages CLI ou les assistants de passerelle), attachez l’assistant de pont de processus enfant afin que les signaux de terminaison soient transmis et les auditeurs détachés à la sortie/erreur. Cela évite les processus orphelins sur systemd et maintient un comportement d’arrêt cohérent sur les plateformes.
Remplacements d’environnement :
PI_BASH_YIELD_MS: rendement par défaut (ms)PI_BASH_MAX_OUTPUT_CHARS: plafond de sortie en mémoire (caractères)OPENCLAW_BASH_PENDING_MAX_OUTPUT_CHARS: limite de stdout/stderr en attente par flux (caractères)PI_BASH_JOB_TTL_MS: TTL pour les sessions terminées (ms, borné à 1 m–3 h)
Config (préféré) :
tools.exec.backgroundMs(par défaut 10000)tools.exec.timeoutSec(par défaut 1800)tools.exec.cleanupMs(par défaut 1800000)tools.exec.notifyOnExit(par défaut true) : mettre en file un événement système + demander un battement de cœur (heartbeat) lorsqu’un exec en arrière-plan se termine.tools.exec.notifyOnExitEmptySuccess(par défaut false) : si vrai, met également en file les événements de fin pour les exécutions réussies en arrière-plan qui n’ont produit aucune sortie.
process tool
Section intitulée « process tool »Actions :
list: sessions en cours + terminéespoll: drainer la nouvelle sortie d’une session (rapporte également le statut de sortie)log: lire la sortie agrégée (prend en chargeoffset+limit)write: envoyer stdin (data,eofen option)kill: terminer une session en arrière-planclear: supprimer une session terminée de la mémoireremove: tuer si en cours d’exécution, sinon effacer si terminé
Notes :
- Seules les sessions en arrière-plan sont répertoriées/persistées en mémoire.
- Les sessions sont perdues lors du redémarrage du processus (aucune persistance sur disque).
- Les journaux de session sont uniquement sauvegardés dans l’historique du chat si vous exécutez
process poll/loget que le résultat de l’outil est enregistré. processest délimité par agent ; il ne voit que les sessions démarrées par cet agent.process listinclut unnamedérivé (verbe de commande + cible) pour des analyses rapides.process logutilise unoffset/limitbasé sur les lignes.- Lorsque
offsetetlimitsont tous deux omis, il renvoie les 200 dernières lignes et inclut un indicateur de pagination. - Lorsque
offsetest fourni et quelimitest omis, cela retourne deoffsetjusqu’à la fin (non limité à 200).
Exemples
Section intitulée « Exemples »Exécuter une longue tâche et interroger plus tard :
{ "tool": "exec", "command": "sleep 5 && echo done", "yieldMs": 1000 }{ "tool": "process", "action": "poll", "sessionId": "<id>" }Démarrer immédiatement en arrière-plan :
{ "tool": "exec", "command": "npm run build", "background": true }Envoyer stdin :
{ "tool": "process", "action": "write", "sessionId": "<id>", "data": "y\n" }