Geplante Aufgaben (Cron)
Cron ist der integrierte Scheduler des Gateway. Er speichert Jobs dauerhaft, weckt den Agenten zum richtigen Zeitpunkt und kann Ausgaben zurück an einen Chat-Kanal oder einen Webhook-Endpunkt liefern.Schnellstart
So funktioniert Cron
- Cron läuft innerhalb des Gateway-Prozesses (nicht innerhalb des Modells).
- Jobs werden unter
~/.openclaw/cron/jobs.jsongespeichert, damit Neustarts keine Zeitpläne verlieren. - Alle Cron-Ausführungen erstellen Einträge für Hintergrundaufgaben.
- Einmalige Jobs (
--at) werden standardmäßig nach erfolgreicher Ausführung automatisch gelöscht. - Isolierte Cron-Ausführungen schließen nach bestem Bemühen nachverfolgte Browser-Tabs/Prozesse für ihre
cron:<jobId>-Sitzung, wenn die Ausführung abgeschlossen ist, damit abgekoppelte Browser-Automatisierung keine verwaisten Prozesse hinterlässt. - Isolierte Cron-Ausführungen schützen außerdem vor veralteten Bestätigungsantworten. Wenn das
erste Ergebnis nur ein vorläufiges Status-Update ist (
on it,pulling everything togetherund ähnliche Hinweise) und keine untergeordnete Subagent-Ausführung mehr für die endgültige Antwort verantwortlich ist, fordert OpenClaw vor der Zustellung noch einmal das tatsächliche Ergebnis an.
lost markieren.
Zeitplantypen
| Art | CLI-Flag | Beschreibung |
|---|---|---|
at | --at | Einmaliger Zeitstempel (ISO 8601 oder relativ wie 20m) |
every | --every | Fester Intervall |
cron | --cron | Cron-Ausdruck mit 5 oder 6 Feldern mit optionalem --tz |
--tz America/New_York für lokale Uhrzeitplanung hinzu.
Wiederkehrende Ausdrücke zur vollen Stunde werden automatisch um bis zu 5 Minuten gestaffelt, um Lastspitzen zu reduzieren. Verwenden Sie --exact, um präzises Timing zu erzwingen, oder --stagger 30s für ein explizites Fenster.
Ausführungsstile
| Stil | Wert von --session | Läuft in | Am besten geeignet für |
|---|---|---|---|
| Hauptsitzung | main | Nächster Heartbeat-Turn | Erinnerungen, Systemereignisse |
| Isoliert | isolated | Dedizierte cron:<jobId> | Berichte, Hintergrundaufgaben |
| Aktuelle Sitzung | current | Bei Erstellung gebunden | Kontextbewusste wiederkehrende Arbeit |
| Benutzerdefinierte Sitzung | session:custom-id | Dauerhaft benannte Sitzung | Workflows, die auf Verlauf aufbauen |
--wake now oder --wake next-heartbeat). Isolierte Jobs führen einen dedizierten Agenten-Turn mit einer frischen Sitzung aus. Benutzerdefinierte Sitzungen (session:xxx) behalten Kontext über mehrere Ausführungen hinweg bei und ermöglichen Workflows wie tägliche Standups, die auf vorherigen Zusammenfassungen aufbauen.
Bei isolierten Jobs umfasst der Laufzeit-Abbau jetzt auch Browser-Bereinigung nach bestem Bemühen für diese Cron-Sitzung. Fehler bei der Bereinigung werden ignoriert, damit das eigentliche Cron-Ergebnis trotzdem Vorrang hat.
Wenn isolierte Cron-Ausführungen Subagenten orchestrieren, bevorzugt die Zustellung außerdem
die endgültige Ausgabe des Nachkommens gegenüber veraltetem vorläufigem Text des Elternteils. Wenn Nachkommen noch laufen,
unterdrückt OpenClaw dieses teilweise Update des Elternteils, statt es anzukündigen.
Payload-Optionen für isolierte Jobs
--message: Prompt-Text (für isolierte Jobs erforderlich)--model/--thinking: Überschreibungen für Modell und Thinking-Stufe--light-context: Einfügen der Workspace-Bootstrap-Datei überspringen--tools exec,read: einschränken, welche Tools der Job verwenden kann
--model verwendet das für diesen Job ausgewählte zulässige Modell. Wenn das angeforderte Modell
nicht zulässig ist, protokolliert Cron eine Warnung und greift stattdessen auf die Modellauswahl
des Agenten/Standards für diesen Job zurück. Konfigurierte Fallback-Ketten gelten weiterhin, aber eine einfache
Modellüberschreibung ohne explizite Fallback-Liste pro Job hängt das Primärmodell des Agenten nicht mehr
als verborgenes zusätzliches Wiederholungsziel an.
Die Prioritätsreihenfolge der Modellauswahl für isolierte Jobs ist:
- Gmail-Hook-Modellüberschreibung (wenn die Ausführung von Gmail kam und diese Überschreibung zulässig ist)
modelin der Payload pro Job- Gespeicherte Modellüberschreibung der Cron-Sitzung
- Modellauswahl des Agenten/Standards
params.fastMode hat, verwendet isoliertes Cron dies standardmäßig. Eine gespeicherte
Sitzungsüberschreibung für fastMode hat in beiden Richtungen weiterhin Vorrang vor der Konfiguration.
Wenn eine isolierte Ausführung auf eine Live-Übergabe bei Modellwechsel trifft, versucht Cron es erneut mit dem
gewechselten Provider/Modell und speichert diese Live-Auswahl vor dem erneuten Versuch. Wenn der
Wechsel auch ein neues Auth-Profil mitbringt, speichert Cron auch diese Auth-Profil-
Überschreibung. Wiederholungen sind begrenzt: Nach dem ersten Versuch plus 2 Wechsel-
Wiederholungen bricht Cron ab, statt endlos zu schleifen.
Zustellung und Ausgabe
| Modus | Was passiert |
|---|---|
announce | Zusammenfassung an Zielkanal zustellen (Standard für isoliert) |
webhook | Abgeschlossene Ereignis-Payload per POST an eine URL senden |
none | Nur intern, keine Zustellung |
--announce --channel telegram --to "-1001234567890" für die Zustellung an einen Kanal. Für Telegram-Forenthemen verwenden Sie -1001234567890:topic:123. Slack-/Discord-/Mattermost-Ziele sollten explizite Präfixe verwenden (channel:<id>, user:<id>).
Bei isolierten Jobs, die Cron gehören, besitzt der Runner den endgültigen Zustellungspfad. Der
Agent wird aufgefordert, eine Klartext-Zusammenfassung zurückzugeben, und diese Zusammenfassung wird dann
über announce, webhook gesendet oder bei none intern behalten. --no-deliver
gibt die Zustellung nicht an den Agenten zurück; die Ausführung bleibt intern.
Wenn die ursprüngliche Aufgabe ausdrücklich sagt, dass ein externer Empfänger benachrichtigt werden soll,
sollte der Agent in seiner Ausgabe vermerken, wer/wo diese Nachricht hingehen soll, statt
zu versuchen, sie direkt zu senden.
Fehlerbenachrichtigungen folgen einem separaten Zielpfad:
cron.failureDestinationsetzt einen globalen Standard für Fehlerbenachrichtigungen.job.delivery.failureDestinationüberschreibt dies pro Job.- Wenn beides nicht gesetzt ist und der Job bereits über
announcezustellt, fallen Fehlerbenachrichtigungen jetzt auf dieses primäre Ankündigungsziel zurück. delivery.failureDestinationwird nur bei Jobs mitsessionTarget="isolated"unterstützt, sofern der primäre Zustellmodus nichtwebhookist.
CLI-Beispiele
Einmalige Erinnerung (Hauptsitzung):Webhooks
Gateway kann HTTP-Webhook-Endpunkte für externe Trigger bereitstellen. In der Konfiguration aktivieren:Authentifizierung
Jede Anfrage muss das Hook-Token per Header enthalten:Authorization: Bearer <token>(empfohlen)x-openclaw-token: <token>
POST /hooks/wake
Ein Systemereignis für die Hauptsitzung in die Warteschlange stellen:text(erforderlich): Ereignisbeschreibungmode(optional):now(Standard) odernext-heartbeat
POST /hooks/agent
Einen isolierten Agenten-Turn ausführen:message (erforderlich), name, agentId, wakeMode, deliver, channel, to, model, thinking, timeoutSeconds.
Zugeordnete Hooks (POST /hooks/<name>)
Benutzerdefinierte Hook-Namen werden überhooks.mappings in der Konfiguration aufgelöst. Zuordnungen können beliebige Payloads mit Vorlagen oder Code-Transformationen in Aktionen vom Typ wake oder agent umwandeln.
Sicherheit
- Halten Sie Hook-Endpunkte hinter loopback, tailnet oder einem vertrauenswürdigen Reverse-Proxy.
- Verwenden Sie ein dediziertes Hook-Token; verwenden Sie keine Gateway-Auth-Tokens erneut.
- Halten Sie
hooks.pathauf einem dedizierten Unterpfad;/wird abgelehnt. - Setzen Sie
hooks.allowedAgentIds, um explizitesagentId-Routing zu begrenzen. - Belassen Sie
hooks.allowRequestSessionKey=false, sofern Sie keine vom Aufrufer ausgewählten Sitzungen benötigen. - Wenn Sie
hooks.allowRequestSessionKeyaktivieren, setzen Sie auchhooks.allowedSessionKeyPrefixes, um zulässige Formen von Sitzungsschlüsseln einzuschränken. - Hook-Payloads werden standardmäßig mit Sicherheitsgrenzen umhüllt.
Gmail-PubSub-Integration
Binden Sie Gmail-Posteingangs-Trigger über Google PubSub an OpenClaw an. Voraussetzungen:gcloud CLI, gog (gogcli), aktivierte OpenClaw-Hooks, Tailscale für den öffentlichen HTTPS-Endpunkt.
Assistenten-Setup (empfohlen)
hooks.gmail, aktiviert das Gmail-Preset und verwendet Tailscale Funnel für den Push-Endpunkt.
Automatischer Gateway-Start
Wennhooks.enabled=true und hooks.gmail.account gesetzt ist, startet das Gateway beim Booten gog gmail watch serve und erneuert die Watch automatisch. Setzen Sie OPENCLAW_SKIP_GMAIL_WATCHER=1, um dies zu deaktivieren.
Manuelles einmaliges Setup
- Wählen Sie das GCP-Projekt aus, dem der von
gogverwendete OAuth-Client gehört:
- Thema erstellen und Gmail Push-Zugriff gewähren:
- Die Watch starten:
Gmail-Modellüberschreibung
Jobs verwalten
openclaw cron add|edit --model ...ändert das ausgewählte Modell des Jobs.- Wenn das Modell zulässig ist, erreicht genau dieser Provider/dieses Modell die isolierte Agenten- Ausführung.
- Wenn es nicht zulässig ist, warnt Cron und greift auf die Modellauswahl des Agenten/Standards für den Job zurück.
- Konfigurierte Fallback-Ketten gelten weiterhin, aber eine einfache
--model-Überschreibung mit keiner expliziten Fallback-Liste pro Job fällt nicht mehr auf das Primärmodell des Agenten als stilles zusätzliches Wiederholungsziel zurück.
Konfiguration
cron.enabled: false oder OPENCLAW_SKIP_CRON=1.
Wiederholung für Einmaljobs: Vorübergehende Fehler (Ratenbegrenzung, Überlastung, Netzwerk, Serverfehler) werden mit exponentiellem Backoff bis zu 3-mal erneut versucht. Permanente Fehler werden sofort deaktiviert.
Wiederholung für wiederkehrende Jobs: Exponentieller Backoff (30 s bis 60 min) zwischen Wiederholungen. Der Backoff wird nach der nächsten erfolgreichen Ausführung zurückgesetzt.
Wartung: cron.sessionRetention (Standard 24h) bereinigt isolierte Einträge für Ausführungs-Sitzungen. cron.runLog.maxBytes / cron.runLog.keepLines bereinigen Ausführungsprotokolldateien automatisch.
Fehlerbehebung
Befehlsleiter
Cron wird nicht ausgelöst
- Prüfen Sie
cron.enabledund die UmgebungsvariableOPENCLAW_SKIP_CRON. - Bestätigen Sie, dass das Gateway dauerhaft läuft.
- Prüfen Sie bei Zeitplänen vom Typ
crondie Zeitzone (--tz) im Vergleich zur Zeitzone des Hosts. reason: not-duein der Ausführungsausgabe bedeutet, dass eine manuelle Ausführung mitopenclaw cron run <jobId> --duegeprüft wurde und der Job noch nicht fällig war.
Cron wurde ausgelöst, aber keine Zustellung
- Zustellmodus
nonebedeutet, dass keine externe Nachricht erwartet wird. - Fehlendes/ungültiges Zustellziel (
channel/to) bedeutet, dass ausgehende Zustellung übersprungen wurde. - Kanal-Auth-Fehler (
unauthorized,Forbidden) bedeuten, dass die Zustellung durch Anmeldedaten blockiert wurde. - Wenn die isolierte Ausführung nur das stille Token (
NO_REPLY/no_reply) zurückgibt, unterdrückt OpenClaw die direkte ausgehende Zustellung und auch den Fallback- Zusammenfassungspfad in der Warteschlange, sodass nichts zurück in den Chat gepostet wird. - Erwarten Sie bei isolierten Jobs, die Cron gehören, nicht, dass der Agent das message-Tool
als Fallback verwendet. Der Runner besitzt die endgültige Zustellung;
--no-deliverhält sie intern, statt eine direkte Sendung zu erlauben.
Fallstricke bei Zeitzonen
- Cron ohne
--tzverwendet die Zeitzone des Gateway-Hosts. - Zeitpläne vom Typ
atohne Zeitzone werden als UTC behandelt. - Heartbeat-
activeHoursverwendet die konfigurierte Zeitzonenauflösung.
Verwandt
- Automatisierung & Aufgaben — alle Automatisierungsmechanismen auf einen Blick
- Hintergrundaufgaben — Aufgabenprotokoll für Cron-Ausführungen
- Heartbeat — periodische Turns der Hauptsitzung
- Zeitzone — Zeitzonenkonfiguration