Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Clear out junk files and repair common Windows errors3Scan for outdated or missing drivers - takes under a minuteTo detect a scheduled run that never happened, monitor the expected run independently: give it a defined grace period, then alert if the job has not reported completion. A scheduler log can show that it tried to launch work; only a completion signal can show that the work finished successfully.
What counts as a missed run?
“The schedule exists,” “the scheduler attempted an invocation,” and “the application completed successfully” are different states. A job may never be triggered, may start and stall, or may finish with an error. Monitoring only scheduler activity can miss the latter two cases.
As an Amazon Associate I earn from qualifying purchases.
For each important schedule, track the expected completion time and require a heartbeat from the job when it finishes. The MissedRun project describes this pattern using unique ping URLs, an expected interval with a grace period, and an alert when a heartbeat is missing. Where possible, also record a start heartbeat and explicit failure signal: together, they help distinguish a missing trigger from a stalled or failed run.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Repair Windows errors before they cause bigger problemsFix Now →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Set up an independent missed-run alert
- Define the expected schedule. Use the actual cron expression, timezone, and enabled state—not an assumption about when the job ought to run. Include any platform-specific delivery window or schedule restrictions.
- Choose a grace period. Allow for ordinary jitter, scheduler delivery delays, and the job’s normal runtime. There is no universal correct duration: too short creates false alerts, while too long delays detection.
- Send a completion heartbeat. Have the job report success only after its required work is complete. Track start and failure separately if the job’s runtime or failure modes matter.
- Alert on missing completion and explicit failure. Keep the last-success time and alert state visible. Retain timestamps and run identifiers so responders can investigate retries and duplicate executions.
- Test the alert path. In a controlled test, suppress or delay a test heartbeat and verify that the alert reaches the intended responder. Also verify that a recovery or retry is safe: make side effects idempotent where possible to avoid duplicate work.
Diagnose a run that appears to be missing
- Recalculate when it was due. Check the cron expression and configured timezone, then account for daylight-saving changes. Look for edits, disabled or suspended schedules, branch restrictions, and whether the schedule exists on the expected branch or controller.
- Check scheduler evidence. Determine whether the event was due, whether an invocation was attempted, and whether delivery was delayed, throttled, or dropped.
- Check job and application evidence. Look for a created run, its start time, completion time, and result. A start signal without a completion signal points to a stall or failure rather than a trigger that never fired.
- Correlate records. Use run identifiers and timestamps to connect scheduler records, job logs, retries, and alerts. Treat an invocation attempt as evidence of dispatch activity, not proof of successful application work.
Platform-specific checks
Amazon EventBridge Scheduler
AWS documents these metrics in the AWS/Scheduler namespace: InvocationAttemptCount, TargetErrorCount, TargetErrorThrottledCount, InvocationThrottleCount, and InvocationDroppedCount. Attempts indicate scheduler activity; target-error and dropped-invocation metrics can help identify delivery problems or exhausted retries. If the schedule has a dead-letter queue (DLQ), inspect its messages for target error details and use the documented DLQ delivery and failure metrics.
#1 Best Overall
AWS cautions that “CloudWatch metrics are delivered on a best-effort basis.” Their completeness and timeliness are not guaranteed, and they are not intended as a complete accounting of operations. Use them as operational signals, not as the only audit record for critical work. An independent completion heartbeat provides an end-to-end check. AWS EventBridge Scheduler monitoring documentation.
For schedule diagnosis, AWS recommends checking cron syntax, timezone, and flexible time windows. The schedule preview shows the next 10 execution times. EventBridge Scheduler cron expressions have fields for minutes, hours, day of month, month, day of week, and year; the two day fields cannot both be specified, and sub-minute cron intervals are unsupported. Universal-target input may pass schedule creation but fail at invocation, so validate target parameters and configure a DLQ. AWS EventBridge Scheduler troubleshooting.
GitHub Actions
GitHub warns that scheduled events can be delayed when Actions is under heavy load and that some queued jobs may be dropped. The start of each hour is a particularly busy period; choosing a different minute may reduce exposure to that peak. Scheduled workflows run only on the default branch, and the workflow file must exist there.
Free tools Windows power users keep installed
One-click scans. No signup required.
GitHub documents UTC as the default timezone, with optional IANA timezone-aware schedules, and a shortest schedule interval of once every five minutes. If a workflow run exists but a job was skipped, inspect the job’s condition evaluation in the logs: a workflow-level condition may have prevented the job from running even though the scheduled event occurred. GitHub Actions scheduled event documentation.
Rank #3
Kubernetes CronJobs
A Kubernetes CronJob creates Jobs approximately once per scheduled time, but circumstances can lead to multiple Jobs or no Job. Design the work to be idempotent. In Kubernetes 1.32 and later, created Jobs carry the batch.kubernetes.io/cronjob-scheduled-timestamp annotation with the originally scheduled time.
Check the CronJob’s status and events, then inspect the Job and its Pods. The CronJob controller creates Jobs; each Job manages its Pods. These settings and behaviors can explain why an occurrence was skipped or appears late:
startingDeadlineSecondslimits how late a Job can be created after its intended schedule. If the deadline passes, Kubernetes skips that occurrence.concurrencyPolicy: Forbidskips a new run while the previous Job is still active..spec.suspendpauses subsequent executions, which count as missed. After unsuspending, Kubernetes may schedule missed work immediately if no starting deadline is set.
Kubernetes documents that more than 100 missed schedules can prevent catch-up scheduling. It also notes that a startingDeadlineSeconds value below 10 seconds may prevent scheduling because the controller checks every 10 seconds. These are controller behaviors, not general reliability statistics. Kubernetes CronJobs documentation.
Quick Recap
Best Value
- Used Book in Good Condition
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.




