-
-
Notifications
You must be signed in to change notification settings - Fork 54.3k
Closed
Description
Summary
Cron jobs using kind: "cron" with cron expressions (e.g., "0 10 * * *") do not automatically fire at their scheduled time. However, jobs using kind: "every" (interval-based) work correctly.
Steps to Reproduce
- Create a cron job with
kind: "cron"and a cron expression:
{
"schedule": {
"kind": "cron",
"expr": "0 10 * * *",
"tz": "Europe/London"
}
}- Wait for the scheduled time to pass
- Check
cron runs— no runs recorded - Check job state —
nextRunAtMshas jumped to the next day
Expected Behavior
The job should fire at the scheduled cron time (e.g., 10:00 daily).
Actual Behavior
- The job never fires automatically
nextRunAtMskeeps advancing without any actual runcron runsshows empty entries
Workaround
- Using
openclaw cron run <jobId> --forcefrom CLI works - Converting to
kind: "every"witheveryMsandanchorMsworks
Evidence
- Job with
kind: "every"(Twitter Monitor, hourly) fires correctly and showslastRunAtMs,lastStatus: "ok" - Job with
kind: "cron"(Daily Email Digest) never fires, nolastRunAtMsuntil manually forced
Environment
- OpenClaw version: 2026.2.3-1
- OS: Linux (Ubuntu)
- Gateway running continuously (no sleep/restarts during test window)
OPENCLAW_SKIP_CRONnot set- Timezone explicitly set in job config
Additional Context
This was discovered while trying to schedule a daily email digest at 10:00 AM. The job was updated at 09:32, should have fired at 10:00 (28 min later), but nextRunAtMs was set to the following day instead. Even after disable/re-enable cycle and setting schedule to 10:15 (7 min in future), the job did not fire and nextRunAtMs again jumped to the next day.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels