Stuck WP-Cron Jobs: System Cron vs WP-Cron

2 min read

Overview #

WordPress has its own pseudo-cron: WP-Cron that runs scheduled events (updates, backups, email queues). By default it fires on website visits, which is unreliable: low-traffic sites starve it, and busy sites get unpredictable loads. When cron events don’t complete, scheduled maintenance silently stops.

The Alert #

CRON_STUCK (warning): WordPress cron events are not completing. Scheduled maintenance and updates may be delayed.

WP-Cron vs System Cron #

WP-Cron (default) System Cron (recommended)
Trigger Fires on visitor requests Fires on a real server schedule
Reliable? No, depends on traffic Yes, runs regardless of visits
Load Random spikes on busy sites Predictable timing
Config Nothing to do DISABLE_WP_CRON + server cron job

Checking for Stuck Events #

WP-CLI:

wp cron event list # all scheduled events + next run times
wp cron event list --status=due # overdue events

If overdue events exist and never run, cron is stuck.

The Fix: Real System Cron #

  1. Disable WP-Cron in wp-config.php:
define('DISABLE_WP_CRON', true);
  1. Add a real cron job on the server (runs every 5 minutes):
*/5 * * * * php /path/to/wp-cron.php

or via wp-cli:

*/5 * * * * wp cron event run --due-now --path=/path/to/wp
  1. Clear stuck events (after fixing the trigger):
wp cron event run --due-now
  1. Verify: wp cron event list --status=due should come back empty on the next run.

What Blocks Cron #

  • REST loopback blocked: WP-Cron (and health checks) rely on loopback when triggered via HTTP; see REST API Loopback Blocked
  • No traffic: visit-triggered cron on a quiet site
  • Long-running jobs: a job exceeding timeouts never completes and blocks the queue
  • Plugin conflicts: a plugin registering failing events

What You Should Do #

Nothing technical. If scheduled things have been missed (digests, backups, renewals), mention it and we re-trigger them after clearing the queue.

The Xponent Standard #

Xponent configures WP-Cron to run on a real system cron schedule (not visitor-triggered): the production-correct setup. Stuck cron is rare on the stack and flagged immediately when it happens. On managed sites we fix it for you.

Related Articles #

Updated on August 31, 2026