Fehlerbehebung bei Automatisierung

Nutze diese Seite bei Problemen mit Scheduler und Zustellung (cron + heartbeat).

Befehls-Leiter

openclaw status
openclaw gateway status
openclaw logs --follow
openclaw doctor
openclaw channels status --probe

Dann Automatisierungs-Checks ausführen:

openclaw cron status
openclaw cron list
openclaw system heartbeat last

Cron feuert nicht

openclaw cron status
openclaw cron list
openclaw cron runs --id <jobId> --limit 20
openclaw logs --follow

Gute Ausgabe sieht so aus:

  • cron status meldet aktiviert und einen zukünftigen nextWakeAtMs.
  • Job ist aktiviert und hat einen gültigen Zeitplan/Zeitzone.
  • cron runs zeigt ok oder einen expliziten Skip-Grund.

Typische Muster:

  • cron: scheduler disabled; jobs will not run automatically → Cron in Konfiguration/Umgebung deaktiviert.
  • cron: timer tick failed → Scheduler-Tick abgestürzt; umgebenden Stack/Log-Kontext prüfen.
  • reason: not-due in der Run-Ausgabe → Manueller Run ohne --force aufgerufen und Job noch nicht fällig.

Cron hat gefeuert, aber keine Zustellung

openclaw cron runs --id <jobId> --limit 20
openclaw cron list
openclaw channels status --probe
openclaw logs --follow

Gute Ausgabe sieht so aus:

  • Run-Status ist ok.
  • Zustellmodus/-ziel sind für isolierte Jobs gesetzt.
  • Channel-Probe meldet, dass der Ziel-Channel verbunden ist.

Typische Muster:

  • Run erfolgreich, aber Zustellmodus ist none → Keine externe Nachricht erwartet.
  • Zustellziel fehlt/ungültig (channel/to) → Run kann intern erfolgreich sein, überspringt aber die Ausgabe.
  • Channel-Auth-Fehler (unauthorized, missing_scope, Forbidden) → Zustellung durch Channel-Credentials/Berechtigungen blockiert.

Heartbeat unterdrückt oder übersprungen

openclaw system heartbeat last
openclaw logs --follow
openclaw config get agents.defaults.heartbeat
openclaw channels status --probe

Gute Ausgabe sieht so aus:

  • Heartbeat aktiviert mit einem Intervall ungleich null.
  • Letztes Heartbeat-Ergebnis ist ran (oder der Skip-Grund ist nachvollziehbar).

Typische Muster:

  • heartbeat skipped mit reason=quiet-hours → Außerhalb der activeHours.
  • requests-in-flight → Main-Lane beschäftigt; Heartbeat verzögert.
  • empty-heartbeat-file → Intervall-Heartbeat übersprungen, weil HEARTBEAT.md keinen verwertbaren Inhalt hat und kein getaggtes Cron-Event in der Queue steht.
  • alerts-disabled → Sichtbarkeitseinstellungen unterdrücken ausgehende Heartbeat-Nachrichten.

Zeitzonen- und activeHours-Fallstricke

openclaw config get agents.defaults.heartbeat.activeHours
openclaw config get agents.defaults.heartbeat.activeHours.timezone
openclaw config get agents.defaults.userTimezone || echo "agents.defaults.userTimezone not set"
openclaw cron list
openclaw logs --follow

Schnelle Regeln:

  • Config path not found: agents.defaults.userTimezone heißt, der Key ist nicht gesetzt; Heartbeat fällt auf die Host-Zeitzone zurück (oder activeHours.timezone falls gesetzt).
  • Cron ohne --tz nutzt die Gateway-Host-Zeitzone.
  • Heartbeat activeHours nutzt die konfigurierte Zeitzonen-Auflösung (user, local oder explizite IANA-TZ).
  • ISO-Zeitstempel ohne Zeitzone werden für Cron-at-Zeitpläne als UTC behandelt.

Typische Muster:

  • Jobs laufen zur falschen Uhrzeit nach Zeitzonen-Änderung des Hosts.
  • Heartbeat wird tagsüber immer übersprungen, weil activeHours.timezone falsch ist.

Verwandt: