Guide

WordPress Cron Not Running: How to Detect and Fix It

WordPress cron is responsible for scheduled posts, plugin updates, email queues, and cache cleanup. When it stops, nothing warns you. Here’s how to detect it - and what to do about it.
{# The problem #}

What happens when WordPress cron stops

WordPress relies on a pseudo-cron system (wp-cron.php) that triggers scheduled tasks on page load. When traffic is low or the system is misconfigured, these tasks simply don’t run. There’s no error. No warning. No log entry saying “cron has stopped.”

The consequences accumulate silently:

  • Scheduled posts stay in draft. Content meant to publish at a specific time never goes live.
  • Plugin updates don’t check. Security patches sit unnoticed.
  • Transient cleanup stops. The wp_options table grows until the database slows down.
  • Email queues stall. Messages queue up but never send.
  • Backup plugins stop backing up. You find out when you need a restore.
{# Why it's hard to detect #}

Why WordPress cron not running is so hard to detect

The site still loads. Pages render normally. Uptime monitors report 100%. There is no built-in mechanism in WordPress to alert you when cron stops executing.

This is why WordPress cron not running is one of the most common silent failures in production WordPress sites. It doesn’t break the site - it breaks everything the site does in the background.

Common causes:

  • DISABLE_WP_CRON set to true without a system cron replacement
  • Server migration where the cron job was not migrated
  • Managed hosting that silently disables wp-cron.php
  • Low-traffic sites where no page loads trigger the pseudo-cron
  • Security plugins blocking wp-cron.php requests
{# How to detect it #}

How to check if WordPress cron is running

There are several ways to check, from manual to automated:

1. Check manually with WP-CLI

wp cron event list

If the “Next Run” timestamps are all in the past, cron is not executing. But this only tells you the current state - not when it stopped or why.

2. Check the database directly

SELECT option_value FROM wp_options WHERE option_name = 'cron';

This shows all scheduled events and their timestamps. Overdue events are a strong indicator that WordPress cron is not running.

3. Monitor cron execution as a metric

The most reliable approach: track every cron execution as a log event, derive a metric from it, and alert when the metric goes to zero. This is what Logystera does.

{# How Logystera helps #}

Detecting WordPress cron not running - automatically

Instead of manually checking WP-CLI or scanning database tables, Logystera’s WordPress plugin captures every cron execution as a structured log event. The processor derives metrics from these events: total runs, execution duration, which hooks fired, and which didn’t.

A rule monitors the time since the last successful cron execution. If WordPress cron has not run in 24 hours, you get an alert - with the exact timestamp of the last execution and which hooks were expected.

What Logystera tracks for WordPress cron:

  • Total cron runs per day, per site
  • Average execution time - spikes indicate resource strain
  • Which hooks executed and which were skipped
  • Time since last successful execution
  • Alerts when cron stops - before anything visibly breaks
{# Real example #}

Real example: 422 days without cron

A managed WordPress site was migrated to new infrastructure. The migration disabled wp-cron.php and added DISABLE_WP_CRON to wp-config.php, expecting a system cron to replace it. The system cron was never configured.

For 422 days, scheduled posts stayed in draft. Plugin update checks never ran. The wp_options table grew to 1.8 GB from accumulated transients. The site loaded fine. Uptime was 99.99%.

With Logystera, this would have been detected within 24 hours of the migration.

{# Fix it #}

How to fix WordPress cron not running

Option 1: Use a real system cron

Add this to your server’s crontab:

*/5 * * * * wget -q -O /dev/null https://yoursite.com/wp-cron.php?doing_wp_cron

And add this to wp-config.php:

define('DISABLE_WP_CRON', true);

Option 2: Use an external cron service

Services like cron-job.org or EasyCron can ping your wp-cron.php on a schedule. This is useful for shared hosting where you don’t have crontab access.

Option 3: Monitor it (the real fix)

Fixing cron once doesn’t prevent it from breaking again. The next migration, the next plugin update, the next hosting change can silently disable it. The only reliable solution is continuous monitoring of cron execution - which is what Logystera provides out of the box.

{# Conclusion #}

Your logs already know

WordPress cron not running is one of the most common and most damaging silent failures in WordPress. It doesn’t produce errors. It doesn’t show warnings. It just quietly stops doing the work your site depends on.

The information is already in your logs. The question is whether anyone is reading them.

Logystera doesn’t guess. It derives truth from logs.

{# CTA #} {% set related = [{"href": "/guides/wordpress/emails-not-sending", "title": "WordPress Emails Not Sending"}, {"href": "/guides/wordpress/uptime-vs-health", "title": "Uptime vs Health"}, {"href": "/guides/wordpress/log-monitoring", "title": "WordPress Log Monitoring"}, {"href": "/guides/wordpress/silent-php-errors", "title": "WordPress Silent PHP Errors"}] %}

Related Logystera content

Frequently asked questions

How often should WordPress cron run?

WordPress cron is event-driven, not interval-driven — it runs whenever someone visits the site, then dispatches whatever scheduled events are due. On a low-traffic site this means cron may go hours without running. The fix is a real system cron pinging wp-cron.php every 5 minutes regardless of traffic.

Why does DISABLE_WP_CRON exist?

It exists so you can replace the pseudo-cron (which depends on visitor traffic) with a real cron job that runs predictably. The constant only disables the trigger on every request — you still need to call wp-cron.php yourself, typically via a server-side cron job or external pinger.

Can I just install a cron-monitoring plugin?

Plugins like WP Crontrol show you cron state in the admin, which is useful for inspection. They don't alert when cron silently stops — for that you need an external monitoring system that reads cron events as a metric and watches for the metric going to zero.

How do I run wp cron event run --due-now in production?

You can wire it into a system cron: */5 * * * * /usr/local/bin/wp --path=/var/www/html cron event run --due-now. This skips the HTTP overhead of pinging wp-cron.php and runs cron events directly via WP-CLI. It's the fastest, most reliable approach if you have shell access.

See what's actually happening in your WordPress system

Connect your site. Logystera starts monitoring within minutes.

Logystera Logystera
Monitoring for WordPress and Drupal sites. Install a plugin or module to catch silent failures — cron stalls, failed emails, login attacks, PHP errors — before users report them.
Company
Copyright © 2026 Logystera. All rights reserved.