Bakgrunds-Exec + Processverktyg¶
OpenClaw kör skalkommandon genom verktyget exec och håller långvariga uppgifter i minnet. Verktyget process hanterar dessa bakgrundssessioner.
exec-verktyg¶
Viktiga parametrar:
command(krävs)yieldMs(standard 10000): bakgrundslägg automatiskt efter denna fördröjningbackground(bool): kör i bakgrunden direkttimeout(sekunder, standard 1800): avsluta processen efter denna timeoutelevated(bool): kör på värden om upphöjt läge är aktiverat/tillåtet- Behöver du en riktig TTY? Ange
pty: true. workdir,env
Beteende:
- Körningar i förgrunden returnerar utdata direkt.
- När den körs i bakgrunden (explicit eller via timeout) returnerar verktyget
status: "running"+sessionIdsamt en kort svans. - Utdata hålls i minnet tills sessionen pollas eller rensas.
- Om verktyget
processär otillåtet körsexecsynkront och ignoreraryieldMs/background.
Bryggning av barnprocesser¶
När du skapar långlivade barnprocesser utanför exekvera/processverktygen (till exempel återuppstår CLI eller gatewayhjälpare), bifoga brohjälparen för barnprocessen så att uppsägningssignalerna vidarebefordras och lyssnarna är fristående vid exit/fel. Detta undviker övergivna processer på systemd och håller avstängningsbeteendet konsekvent över plattformar.
Miljöåsidosättningar:
PI_BASH_YIELD_MS: standard-yield (ms)PI_BASH_MAX_OUTPUT_CHARS: gräns för utdata i minnet (tecken)OPENCLAW_BASH_PENDING_MAX_OUTPUT_CHARS: gräns för väntande stdout/stderr per ström (tecken)PI_BASH_JOB_TTL_MS: TTL för avslutade sessioner (ms, begränsad till 1 m–3 h)
Konfig (föredras):
tools.exec.backgroundMs(standard 10000)tools.exec.timeoutSec(standard 1800)tools.exec.cleanupMs(standard 1800000)tools.exec.notifyOnExit(standard true): köa en systemhändelse + begär hjärtslag när en bakgrundsexekvering avslutas.
process-verktyg¶
Åtgärder:
list: körande + avslutade sessionerpoll: töm ny utdata för en session (rapporterar även avslutsstatus)log: läs den aggregerade utdatan (stöderoffset+limit)write: skicka stdin (data, valfrieof)kill: terminera en bakgrundssessionclear: ta bort en avslutad session från minnetremove: döda om den körs, annars rensa om den är avslutad
Noteringar:
- Endast bakgrundssessioner listas/persisteras i minnet.
- Sessioner går förlorade vid omstart av processen (ingen persistens på disk).
- Sessionsloggar sparas endast i chatthistoriken om du kör
process poll/logoch verktygsresultatet registreras. processär avgränsad per agent; den ser endast sessioner som startats av den agenten.process listinkluderar en härleddname(kommandoverb + mål) för snabba överblickar.process loganvänder radbaseradoffset/limit(utelämnaoffsetför att hämta de senaste N raderna).
Exempel¶
Kör en lång uppgift och polla senare:
{ "tool": "exec", "command": "sleep 5 && echo done", "yieldMs": 1000 }
{ "tool": "process", "action": "poll", "sessionId": "<id>" }
Starta omedelbart i bakgrunden:
{ "tool": "exec", "command": "npm run build", "background": true }
Skicka stdin:
{ "tool": "process", "action": "write", "sessionId": "<id>", "data": "y\n" }