wp_cron_overdue
Severity: Warning
Signal: wp.cron — payload.type = overdue_jobs
What this signal means
WordPress has background cron jobs that were due to run but haven't executed yet. Overdue jobs accumulate when WP-Cron is not firing reliably.
What surprise this prevents
Background features silently stopping — emails not sending, orders not processing, transients not clearing — while the site appears to be working normally.
Why it matters
WordPress cron jobs handle essential background work: sending emails, processing WooCommerce orders, publishing scheduled posts, cleaning up expired transients, and running plugin tasks. Stuck cron queues cause silent failures across many features.
Investigate
View entity alerts in Logystera →
Check:
payload.overdue_count— how many jobs are stuck?- How long has this been happening? Check alert history.
- Correlate with
wp_missed_scheduled_post— related cron issues often appear together.
In WordPress admin, install WP Crontrol (wp-cron-control) to see all scheduled events and which are overdue.
Recommended actions
-
Run due cron jobs immediately via WP-CLI:
bash wp cron run --due-now -
Check whether cron is being triggered. WP-Cron runs when visitors load pages. On low-traffic sites or maintenance pages, there may be no traffic to trigger it.
Add a real cron job that calls WordPress cron directly:
bash
# crontab -e
* * * * * php /var/www/html/wp-cron.php
# or via curl:
* * * * * curl -s https://yoursite.com/wp-cron.php?doing_wp_cron > /dev/null
-
Check for
DISABLE_WP_CRON. If cron is disabled and no external trigger is configured, all jobs queue up indefinitely. -
Check for slow cron jobs blocking the queue. One long-running cron job can prevent others from running during the same cycle. Use WP Crontrol to check recent execution times.
-
Look for errors in cron runs — check
cron.runsignals in Logystera forhad_error: truearound the same time period.
When to safely ignore
A small number of overdue jobs (1–2) on a low-traffic site is normal WP-Cron behavior. WP-Cron fires on page load, so periods without traffic mean cron doesn't run.
If payload.overdue_count is consistently growing rather than clearing, that indicates a structural problem with how cron is triggered and requires attention.
Signal reference
{
"event_type": "wp.cron",
"payload": {
"type": "overdue_jobs",
"overdue_count": 12
}
}