Cron-jobb (Gateway-schemaläggare)
Cron vs Heartbeat? Se Cron vs Heartbeat för vägledning om när du ska använda respektive.Cron är Gateways inbyggda schemaläggare. Det kvarstår jobb, väcker agenten vid rätt tid, och kan eventuellt leverera utdata tillbaka till en chatt. Om du vill ”kör detta varje morgon” eller ”peta agenten om 20 minuter” är cron mekanismen. Felsökning: /automation/troubleshooting
TL;DR
- Cron körs inuti Gateway (inte inuti modellen).
- Jobb sparas under
~/.openclaw/cron/så omstarter inte tappar scheman. - Två körsätt:
- Huvudsession: köa en systemhändelse och kör sedan vid nästa heartbeat.
- Isolerad: kör ett dedikerat agentvarv i
cron:<jobId>, med leverans (annonsera som standard eller ingen).
- Väckningar är förstklassiga: ett jobb kan begära ”väck nu” vs ”nästa heartbeat”.
Snabbstart (handlingsbar)
Skapa en engångspåminnelse, verifiera att den finns och kör den omedelbart:Tool-call-motsvarigheter (Gateway cron-verktyg)
För de kanoniska JSON-formerna och exempel, se JSON-schema för tool calls.Var cron-jobb lagras
Cron jobb kvarstår på Gateway-värden på~/.openclaw/cron/jobs.json som standard.
Gateway laddar filen till minne och skriver den tillbaka vid ändringar, så manuella redigeringar
är bara säkra när Gateway stoppas. Föredrar openclaw cron add/edit eller cron
tool call API för ändringar.
Nybörjarvänlig översikt
Tänk på ett cron-jobb som: när det ska köras + vad det ska göra.-
Välj ett schema
- Engångspåminnelse →
schedule.kind = "at"(CLI:--at) - Återkommande jobb →
schedule.kind = "every"ellerschedule.kind = "cron" - Om din ISO-tidsstämpel saknar tidszon behandlas den som UTC.
- Engångspåminnelse →
-
Välj var det körs
sessionTarget: "main"→ kör under nästa heartbeat med huvudkontext.sessionTarget: "isolated"→ kör ett dedikerat agentvarv icron:<jobId>.
-
Välj payload
- Huvudsession →
payload.kind = "systemEvent" - Isolerad session →
payload.kind = "agentTurn"
- Huvudsession →
schedule.kind = "at") ta bort efter framgång som standard. Ställ in
deleteAfterRun: false för att behålla dem (de kommer att inaktivera efter framgång).
Begrepp
Jobb
Ett cron-jobb är en lagrad post med:- ett schema (när det ska köras),
- en payload (vad det ska göra),
- valfritt leveransläge (annonsera eller ingen).
- valfri agentbindning (
agentId): kör jobbet under en specifik agent; om den saknas eller är okänd faller gateway tillbaka till standardagenten.
jobId (används av CLI/Gateway API).
I agent verktygssamtal är jobId kanoniskt; äldre id accepteras för kompatibilitet.
Ett skott jobb auto-ta bort efter framgång som standard; sätt deleteAfterRun: false för att behålla dem.
Scheman
Cron stöder tre schematyper:at: engångstidpunkt viaschedule.at(ISO 8601).every: fast intervall (ms).cron: 5-fälts cron-uttryck med valfri IANA-tidszon.
croner. Om en tidszon utelämnas används Gateway-värdens
lokala tidszon.
Huvud- vs isolerad körning
Huvudsession-jobb (systemhändelser)
Huvudjobben skapar en systemhändelse och väcker valfritt hjärtslag löparen. De måste användapayload.kind = "systemEvent".
wakeMode: "now"(standard): händelsen triggar en omedelbar heartbeat-körning.wakeMode: "next-heartbeat": händelsen väntar till nästa schemalagda heartbeat.
Isolerade jobb (dedikerade cron-sessioner)
Isolerade jobb kör ett dedikerat agentvarv i sessioncron:<jobId>.
Viktiga beteenden:
- Prompten prefixeras med
[cron:<jobId> <job name>]för spårbarhet. - Varje körning startar ett nytt sessions-id (ingen tidigare konversation följer med).
- Standardbeteende: om
deliveryutelämnas annonserar isolerade jobb en sammanfattning (delivery.mode = "announce"). delivery.mode(endast isolerad) väljer vad som händer:announce: leverera en sammanfattning till målkanalen och posta en kort sammanfattning till huvudsessionen.none: endast internt (ingen leverans, ingen sammanfattning i huvudsessionen).
wakeModestyr när sammanfattningen i huvudsessionen postas:now: omedelbar heartbeat.next-heartbeat: väntar till nästa schemalagda heartbeat.
Payload-former (vad som körs)
Två payload-typer stöds:systemEvent: endast huvudsession, routad via heartbeat-prompten.agentTurn: endast isolerad session, kör ett dedikerat agentvarv.
agentTurn-fält:
message: obligatorisk textprompt.model/thinking: valfria åsidosättningar (se nedan).timeoutSeconds: valfri timeout-åsidosättning.
delivery.mode:none|announce.delivery.channel:lasteller en specifik kanal.delivery.to: kanalspecifikt mål (telefon/chatt/kanal-id).delivery.bestEffort: undvik att misslyckas jobbet om annonseringsleverans misslyckas.
delivery.channel/delivery.to
för att rikta chatten istället. När delivery.mode = "none", ingen sammanfattning publiceras på huvudsessionen.
Om delivery utelämnas för isolerade jobb, använder OpenClaw som standard announce.
Flöde för annonseringsleverans
Närdelivery.mode = "announce" levererar cron direkt via de utgående kanaladaptrarna.
Huvudagenten snurras inte upp för att tillverka eller vidarebefordra budskapet.
Beteendedetaljer:
- Innehåll: leveransen använder den isolerade körningens utgående payloads (text/media) med normal chunkning och kanalspecifik formatering.
- Endast-heartbeat-svar (
HEARTBEAT_OKutan verkligt innehåll) levereras inte. - Om den isolerade körningen redan skickade ett meddelande till samma mål via meddelandeverktyget hoppas leveransen över för att undvika dubletter.
- Saknade eller ogiltiga leveransmål gör att jobbet misslyckas om inte
delivery.bestEffort = true. - En kort sammanfattning postas till huvudsessionen endast när
delivery.mode = "announce". - Sammanfattningen i huvudsessionen respekterar
wakeMode:nowtriggar en omedelbar heartbeat ochnext-heartbeatväntar till nästa schemalagda heartbeat.
Modell- och tänkande-åsidosättningar
Isolerade jobb (agentTurn) kan åsidosätta modell och tänkenivå:
model: Leverantör/modellsträng (t.ex.,anthropic/claude-sonnet-4-20250514) eller alias (t.ex.,opus)thinking: Tänkenivå (off,minimal,low,medium,high,xhigh; endast GPT-5.2 + Codex-modeller)
model på huvudjobben också, men det ändrar den delade huvudmodellen
session. Vi rekommenderar modellersättningar endast för isolerade jobb för att undvika
oväntade sammanhangsskift.
Prioritetsordning för upplösning:
- Jobb-payload-åsidosättning (högst)
- Krokspecifika standardvärden (t.ex.,
hooks.gmail.model) - Agentkonfig-standard
Leverans (kanal + mål)
Isolerade jobb kan leverera utdata till en kanal via den toppnivådelivery-konfigen:
delivery.mode:announce(leverera en sammanfattning) ellernone.delivery.channel:whatsapp/telegram/discord/slack/mattermost(plugin) /signal/imessage/last.delivery.to: kanalspecifikt mottagarmål.
sessionTarget: "isolated").
Om delivery.channel eller delivery.to utelämnas kan cron falla tillbaka till huvudsessionens
”senaste rutt” (den senaste platsen där agenten svarade).
Påminnelser om målformat:
- Slack/Discord/Mattermost (plugin) mål bör använda explicita prefix (t.ex.
kanal:<id>,användare:<id>) för att undvika tvetydighet. - Telegram-ämnen bör använda
:topic:-formen (se nedan).
Telegram-leveransmål (ämnen / forumtrådar)
Telegram stöder forumämnen viamessage_thread_id. För cron-leverans kan du koda
ämnet/tråden i to-fältet:
-1001234567890(endast chatt-id)-1001234567890:topic:123(föredragen: explicit ämnesmarkör)-1001234567890:123(kortform: numeriskt suffix)
telegram:... / telegram:group:... accepteras också:
telegram:group:-1001234567890:topic:123
JSON-schema för tool calls
Använd dessa former när du anropar Gatewaycron.* verktyg direkt (agentsamtal eller RPC).
CLI-flaggor accepterar mänskliga varaktigheter som “20m”, men verktygssamtal bör använda en ISO 8601 sträng
för “schedule.at” och millisekunder för “schedule.everyM”.
cron.add params
Engångsjobb, huvudsession (systemhändelse):schedule.kind:at(at),every(everyMs), ellercron(expr, valfritz).schedule.ataccepterar ISO 8601 (tidszon valfri; behandlas som UTC när den utelämnas).everyMsär millisekunder.sessionTargetmåste vara"main"eller"isolated"och måste matchapayload.kind.- Valfria fält:
agentId,description,enabled,deleteAfterRun(standard true förat),delivery. wakeModeär som standard"now"när det utelämnas.
cron.update params
jobIdär kanoniskt;idaccepteras för kompatibilitet.- Använd
agentId: nulli patchen för att rensa en agentbindning.
cron.run och cron.remove params
Lagring & historik
- Jobblager:
~/.openclaw/cron/jobs.json(Gateway-hanterad JSON). - Körhistorik:
~/.openclaw/cron/runs/<jobId>.jsonl(JSONL, auto-rensas). - Åsidosätt lagringssökväg:
cron.storei konfig.
Konfiguration
cron.enabled: false(konfig)OPENCLAW_SKIP_CRON=1(env)
CLI-snabbstart
Engångspåminnelse (UTC ISO, auto-raderas efter lyckad körning):--due för att endast köra när det är dags):
Gateway API-yta
cron.list,cron.status,cron.add,cron.update,cron.removecron.run(force eller due),cron.runsFör omedelbara systemhändelser utan jobb, användopenclaw system event.
Felsökning
”Inget körs”
- Kontrollera att cron är aktiverat:
cron.enabledochOPENCLAW_SKIP_CRON. - Kontrollera att Gateway körs kontinuerligt (cron körs inuti Gateway-processen).
- För
cron-scheman: bekräfta tidszon (--tz) vs värdens tidszon.
Ett återkommande jobb fortsätter att fördröjas efter fel
- OpenClaw tillämpar exponentiell återförsöks-backoff för återkommande jobb efter på varandra följande fel: 30 s, 1 min, 5 min, 15 min, därefter 60 min mellan försök.
- Backoff återställs automatiskt efter nästa lyckade körning.
- Engångsjobb (
at) inaktiveras efter en terminal körning (ok,errorellerskipped) och gör inga återförsök.
Telegram levererar till fel plats
- För forumämnen, använd
-100…:topic:<id>så att det är explicit och entydigt. - Om du ser
telegram:...-prefix i loggar eller lagrade ”senaste rutt”-mål är det normalt; cron-leverans accepterar dem och tolkar fortfarande ämnes-id korrekt.