Geplante Aufgaben (Cron)
Cron ist der integrierte Planer 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 senden.Schnellstart
So funktioniert Cron
- Cron läuft innerhalb des Gateway-Prozesses (nicht innerhalb des Modells).
- Jobs werden unter
~/.openclaw/cron/jobs.jsondauerhaft gespeichert, damit Neustarts keine Zeitpläne verlieren. - Alle Cron-Ausführungen erstellen Einträge für Hintergrundaufgaben.
- Einmalige Jobs (
--at) werden nach erfolgreicher Ausführung standardmäßig automatisch gelöscht. - Isolierte Cron-Ausführungen schließen nach bestem Bemühen verfolgte Browser-Tabs/Prozesse für ihre Sitzung
cron:<jobId>, 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 eine vorläufige Statusaktualisierung 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 | Festes Intervall |
cron | --cron | 5-Feld- oder 6-Feld-Cron-Ausdruck mit optionalem --tz |
--tz America/New_York hinzu, um nach lokaler Uhrzeit zu planen.
Wiederkehrende Ausdrücke zur vollen Stunde werden automatisch um bis zu 5 Minuten gestaffelt, um Lastspitzen zu verringern. Verwenden Sie --exact, um exaktes Timing zu erzwingen, oder --stagger 30s für ein explizites Fenster.
Ausführungsstile
| Stil | Wert für --session | Läuft in | Am besten geeignet für |
|---|---|---|---|
| Hauptsitzung | main | Nächster Heartbeat-Turn | Erinnerungen, Systemereignisse |
| Isoliert | isolated | Dediziertes cron:<jobId> | Berichte, Hintergrundaufgaben |
| Aktuelle Sitzung | current | Bei Erstellung gebunden | Kontextbewusste wiederkehrende Arbeit |
| Benutzerdefinierte Sitzung | session:custom-id | Dauerhafte 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 den Kontext über mehrere Ausführungen hinweg bei und ermöglichen Workflows wie tägliche Standups, die auf vorherigen Zusammenfassungen aufbauen.
Bei isolierten Jobs umfasst das Aufräumen der Laufzeit jetzt die Bereinigung des Browsers für diese Cron-Sitzung nach bestem Bemühen. Fehler bei der Bereinigung werden ignoriert, damit das eigentliche Cron-Ergebnis Vorrang hat.
Wenn isolierte Cron-Ausführungen Subagenten orchestrieren, bevorzugt die Zustellung außerdem die endgültige Ausgabe des Nachfolgers gegenüber veraltetem vorläufigem Text des Elternteils. Wenn Nachfolger noch laufen, unterdrückt OpenClaw diese teilweise Elternaktualisierung, statt sie anzukündigen.
Nutzlastoptionen für isolierte Jobs
--message: Prompt-Text (für isolierte Jobs erforderlich)--model/--thinking: Überschreibungen für Modell und Thinking-Stufe--light-context: Überspringt die Injektion von Bootstrap-Dateien für den Workspace--tools exec,read: Beschränkt, welche Tools der Job verwenden kann
--model verwendet das für diesen Job ausgewählte erlaubte Modell. Wenn das angeforderte Modell nicht erlaubt ist, protokolliert Cron eine Warnung und fällt stattdessen auf die Modellauswahl des Job-Agenten bzw. des Standardmodells zurück. Konfigurierte Fallback-Ketten gelten weiterhin, aber eine einfache Modellüberschreibung ohne explizite Fallback-Liste pro Job hängt das primäre Agentenmodell nicht mehr als verborgenes zusätzliches Wiederholungsziel an.
Die Priorität der Modellauswahl für isolierte Jobs ist:
- Gmail-Hook-Modellüberschreibung (wenn die Ausführung von Gmail stammt und diese Überschreibung erlaubt ist)
modelin der Nutzlast pro Job- Gespeicherte Modellüberschreibung der Cron-Sitzung
- Modellauswahl des Agenten/Standardmodells
params.fastMode hat, verwendet isoliertes Cron das standardmäßig. Eine gespeicherte Sitzungsüberschreibung für fastMode hat in beide Richtungen weiterhin Vorrang vor der Konfiguration.
Wenn eine isolierte Ausführung auf eine Live-Modellwechsel-Übergabe trifft, versucht Cron es mit dem gewechselten Provider/Modell erneut und speichert diese Live-Auswahl vor dem Wiederholungsversuch. Wenn der Wechsel auch ein neues Authentifizierungsprofil enthält, speichert Cron auch diese Überschreibung des Authentifizierungsprofils dauerhaft. Wiederholungen sind begrenzt: Nach dem ersten Versuch plus 2 Wiederholungsversuchen nach Wechsel bricht Cron ab, statt endlos zu schleifen.
Zustellung und Ausgabe
| Modus | Was passiert |
|---|---|
announce | Sendet eine Zusammenfassung an den Zielkanal (Standard für isolierte Jobs) |
webhook | Sendet per POST die Nutzlast des abgeschlossenen Ereignisses an eine URL |
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. Ziele für Slack/Discord/Mattermost sollten explizite Präfixe verwenden (channel:<id>, user:<id>).
Bei isolierten Jobs in Besitz von Cron steuert der Runner den endgültigen Zustellpfad. Der Agent wird aufgefordert, eine Klartext-Zusammenfassung zurückzugeben, und diese Zusammenfassung wird dann per announce oder 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 explizit sagt, dass ein externer Empfänger benachrichtigt werden soll, sollte der Agent in seiner Ausgabe angeben, wer/wo dieser Empfänger ist, statt zu versuchen, die Nachricht direkt zu senden.
Fehlerbenachrichtigungen folgen einem separaten Zielpfad:
cron.failureDestinationlegt einen globalen Standard für Fehlerbenachrichtigungen fest.job.delivery.failureDestinationüberschreibt dies pro Job.- Wenn keines von beiden gesetzt ist und der Job bereits per
announcezustellt, greifen Fehlerbenachrichtigungen jetzt standardmäßig auf dieses primäre Ankündigungsziel zurück. delivery.failureDestinationwird nur für Jobs mitsessionTarget="isolated"unterstützt, sofern der primäre Zustellmodus nichtwebhookist.
CLI-Beispiele
Einmalige Erinnerung (Hauptsitzung):Webhooks
Das Gateway kann HTTP-Webhooks-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
Reiht ein Systemereignis für die Hauptsitzung ein:text(erforderlich): Ereignisbeschreibungmode(optional):now(Standard) odernext-heartbeat
POST /hooks/agent
Führt einen isolierten Agenten-Turn aus: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 Nutzlasten 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-Authentifizierungstokens erneut.
- Halten Sie
hooks.pathauf einem dedizierten Unterpfad;/wird abgelehnt. - Setzen Sie
hooks.allowedAgentIds, um explizitesagentId-Routing einzuschränken. - Lassen Sie
hooks.allowRequestSessionKey=false, es sei denn, Sie benötigen vom Aufrufer ausgewählte Sitzungen. - Wenn Sie
hooks.allowRequestSessionKeyaktivieren, setzen Sie auchhooks.allowedSessionKeyPrefixes, um erlaubte Formen von Sitzungsschlüsseln einzuschränken. - Hook-Nutzlasten werden standardmäßig mit Sicherheitsgrenzen umschlossen.
Gmail-PubSub-Integration
Verbinden Sie Gmail-Posteingangs-Trigger über Google PubSub mit OpenClaw. Voraussetzungen:gcloud CLI, gog (gogcli), aktivierte OpenClaw-Hooks, Tailscale für den öffentlichen HTTPS-Endpunkt.
Assistentengestützte Einrichtung (empfohlen)
hooks.gmail, aktiviert die Gmail-Voreinstellung 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.
Manuelle einmalige Einrichtung
- 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 erlaubt ist, erreicht genau dieser Provider/dieses Modell die isolierte Agenten-Ausführung.
- Wenn es nicht erlaubt ist, warnt Cron und fällt auf die Modellauswahl des Job-Agenten bzw. des Standardmodells zurück.
- Konfigurierte Fallback-Ketten gelten weiterhin, aber eine einfache
--model-Überschreibung ohne explizite Fallback-Liste pro Job fällt nicht mehr stillschweigend auf das primäre Agentenmodell als zusätzliches Wiederholungsziel zurück.
Konfiguration
cron.enabled: false oder OPENCLAW_SKIP_CRON=1.
Wiederholungen für einmalige Jobs: Vorübergehende Fehler (Ratenbegrenzung, Überlastung, Netzwerk, Serverfehler) werden mit exponentiellem Backoff bis zu 3-mal wiederholt. Permanente Fehler führen zur sofortigen Deaktivierung.
Wiederholungen für wiederkehrende Jobs: Exponentieller Backoff (30s bis 60m) zwischen Wiederholungsversuchen. Der Backoff wird nach der nächsten erfolgreichen Ausführung zurückgesetzt.
Wartung: cron.sessionRetention (Standard 24h) bereinigt Einträge isolierter Ausführungs-Sitzungen. cron.runLog.maxBytes / cron.runLog.keepLines bereinigen Ausführungsprotokolldateien automatisch.
Fehlerbehebung
Befehlsabfolge
Cron wird nicht ausgelöst
- Prüfen Sie
cron.enabledund die UmgebungsvariableOPENCLAW_SKIP_CRON. - Bestätigen Sie, dass das Gateway kontinuierlich läuft.
- Prüfen Sie bei
cron-Zeitplänen die Zeitzone (--tz) im Vergleich zur Zeitzone des Hosts. reason: not-duein der Ausführungsausgabe bedeutet, dass die 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-Authentifizierungsfehler (
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-Pfad für die in die Warteschlange gestellte Zusammenfassung, sodass nichts in den Chat zurückgesendet wird. - Erwarten Sie bei Cron-gesteuerten isolierten Jobs nicht, dass der Agent das Nachrichtentool als Fallback verwendet. Der Runner steuert die endgültige Zustellung;
--no-deliverhält sie intern, statt ein direktes Senden zu erlauben.
Fallstricke bei Zeitzonen
- Cron ohne
--tzverwendet die Zeitzone des Gateway-Hosts. at-Zeitpläne ohne 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 Hauptsitzungs-Turns
- Zeitzone — Zeitzonenkonfiguration