openclaw - 💡(How to fix) Fix Cron/manual runs queue behind healthy long-lived cron sessions under light load

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

The cron execution lane appears to serialize all cron/manual runs behind long-lived isolated cron sessions, so fresh runs can wait tens of seconds even when queue depth is effectively one active run plus at most 0-2 queued items.

Root Cause

The cron execution lane appears to serialize all cron/manual runs behind long-lived isolated cron sessions, so fresh runs can wait tens of seconds even when queue depth is effectively one active run plus at most 0-2 queued items.

Fix Action

Fix / Workaround

  1. cron work should have enough execution capacity/isolation that one healthy long-lived run does not starve unrelated due/manual runs for tens of seconds, or
  2. the product should make that serialization/throughput limit explicit and provide supported knobs to separate heavy cron lanes from routine cron/manual dispatch.

Code Example

2026-05-27T02:24:16Z cron: queued manual run waiting for an execution slot {jobId=0b9583..., waitMs=33344, queuedAhead=2}
2026-05-27T02:24:16Z lane wait exceeded: lane=cron waitedMs=33344 queueAhead=2
2026-05-27T02:24:26Z cron: queued manual run waiting for an execution slot {jobId=0b9583..., waitMs=27326, queuedAhead=1}
2026-05-27T02:24:26Z cron: queued manual run skipped before execution {jobId=0b9583..., reason=already-running}
2026-05-27T02:24:26Z cron: queued manual run waiting for an execution slot {jobId=d154ec5..., waitMs=13233, queuedAhead=0}
2026-05-27T02:24:26Z lane wait exceeded: lane=cron waitedMs=13233 queueAhead=0
RAW_BUFFERClick to expand / collapse

Summary

The cron execution lane appears to serialize all cron/manual runs behind long-lived isolated cron sessions, so fresh runs can wait tens of seconds even when queue depth is effectively one active run plus at most 0-2 queued items.

Symptoms

On a local 2026-05-27 gateway log under otherwise light load:

  • cron: queued manual run waiting for an execution slot for cla-work-loop with waitMs=33344, queuedAhead=2
  • another cla-work-loop manual run with waitMs=27326, queuedAhead=1, then skipped as already-running
  • jarl-work-loop manual run with waitMs=13233, queuedAhead=0
  • paired diagnostic warnings: lane wait exceeded: lane=cron waitedMs=...

At the same time, adjacent isolated cron sessions were simply long-lived, not obviously stuck. Recent durations from the same instance:

  • cla-work-loop: 96s, 172s, 186s, 308s
  • omnifocus-replan-morning: 209s, 213s, 254s, 330s
  • mail-inbox-triage: occasional 350s run

So one active long cron run is enough to delay unrelated cron/manual work materially.

Why this looks like a real bug

The waits are not just cosmetic queue chatter from a large backlog. The log shows queuedAhead=0 still waiting 13s for a slot, and queuedAhead=1..2 waiting 27-33s. That makes cron/manual timing drift noticeable even under light load.

Expected

Either:

  1. cron work should have enough execution capacity/isolation that one healthy long-lived run does not starve unrelated due/manual runs for tens of seconds, or
  2. the product should make that serialization/throughput limit explicit and provide supported knobs to separate heavy cron lanes from routine cron/manual dispatch.

Observed log lines

2026-05-27T02:24:16Z cron: queued manual run waiting for an execution slot {jobId=0b9583..., waitMs=33344, queuedAhead=2}
2026-05-27T02:24:16Z lane wait exceeded: lane=cron waitedMs=33344 queueAhead=2
2026-05-27T02:24:26Z cron: queued manual run waiting for an execution slot {jobId=0b9583..., waitMs=27326, queuedAhead=1}
2026-05-27T02:24:26Z cron: queued manual run skipped before execution {jobId=0b9583..., reason=already-running}
2026-05-27T02:24:26Z cron: queued manual run waiting for an execution slot {jobId=d154ec5..., waitMs=13233, queuedAhead=0}
2026-05-27T02:24:26Z lane wait exceeded: lane=cron waitedMs=13233 queueAhead=0

Environment

  • OpenClaw stable, local macOS deployment
  • isolated cron sessions
  • multiple agents, but the problematic queueing happened with only a few concurrent cron/manual runs rather than a large burst

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

openclaw - 💡(How to fix) Fix Cron/manual runs queue behind healthy long-lived cron sessions under light load