Skip to content
Latchkey

Kubernetes CronJob "Cannot determine if job needs to be started" / Missed Schedule

A CronJob missed so many scheduled start times that the controller gave up scheduling new runs. This happens when the controller was down/paused, or startingDeadlineSeconds is set such that more than 100 missed windows accumulated.

What this error means

kubectl describe cronjob shows a Warning FailedNeedsStart ... Cannot determine if job needs to be started: too many missed start times (> 100). The CronJob stops firing new Jobs until the condition clears.

kubectl describe cronjob
Warning  FailedNeedsStart  cronjob-controller  Cannot determine if job needs to
be started: too many missed start times (> 100). Set or decrease
.spec.startingDeadlineSeconds or check clock skew.

Common causes

Controller down / clock skew accumulated misses

If the cronjob controller (or control plane) was down for a long stretch, more than 100 schedule windows passed unstarted, and the controller refuses to backfill them all.

startingDeadlineSeconds too long with frequent schedule

A long startingDeadlineSeconds on a frequent schedule lets a large backlog of missed windows count, tripping the >100 guard after any pause.

How to fix it

Set a bounded startingDeadlineSeconds

A short deadline limits how far back the controller looks, so a brief pause does not accumulate 100+ missed windows.

cronjob.yaml
spec:
  schedule: "*/5 * * * *"
  startingDeadlineSeconds: 200   # only consider recent missed windows
  concurrencyPolicy: Forbid

Clear the condition and check time

  1. Confirm the control-plane/controller is healthy and node clocks are in sync.
  2. Re-apply the CronJob with a bounded startingDeadlineSeconds so the guard resets.
  3. If a single missed run matters, trigger it manually with kubectl create job --from=cronjob/<name>.
Terminal
kubectl create job manual-run --from=cronjob/report

How to prevent it

  • Set a bounded startingDeadlineSeconds so brief pauses do not accumulate missed windows.
  • Keep node/control-plane clocks synced (NTP) to avoid skew-driven misses.
  • Choose a concurrencyPolicy that matches whether overlapping runs are safe.

Related guides

Tired of flaky CI? Latchkey auto-heals failed jobs and retries them for you. Start free →