Skip to main content
Ahosting Logo
  • Hosting
    • WordPress Hosting
      Fast, secure hosting for WordPress sites
    • Web Hosting
      Reliable, affordable hosting for sites
    • FFMpeg Hosting
      Fast hosting for FFmpeg projects
    • Reseller Hosting
      Start hosting biz with white-label plans
    • VPS Hosting
      Scalable VPS with full control & power
    • Dedicated Server
      High-power servers for max security
    • WooCommerce Hosting
      Fast hosting for WooCommerce shops
  • Domain
    • Register a Domain
      Secure your domain name in minutes
    • Domain Transfer
      Move domains to Ahosting with ease
    • Premium SSL Certificate
      Enterprise SSL to build customer trust
  • Support
    • Submit A Ticket
      Expert 24/7 help from our support team
    • Abuse Report
      Report abuse to keep network safe
    • Knowledge Base
      Quick answers via step-by-step guides
  • Company
    • Blog
      Expert articles to power your online growth
    • Compare Hosts
      Side-by-side comparison
    • Datacenter
      Secure, high tech datacenter for hosting
    • About Us
      Learn about our mission, values & team
    • Contact Us
      Contact sales for plans, pricing & advice
    • Sitemap
      Find info fast with our clear site map
My Account
Ahosting Logo
  • Hosting
    • Web Hosting
    • WordPress Hosting
    • FFMpeg Hosting
    • Reseller Hosting
    • VPS Hosting
    • Dedicated Server
    • WooCommerce Hosting
  • Domain
    • Register a Domain
    • Domain Transfer
    • Premium SSL Certificate
  • Support
    • Knowledge Base
    • Abuse Report
    • Submit A Ticket
  • Company
    • About Us
    • Contact Us
    • Blog
    • Sitemap
    • Datacenter
  • Legal
    • Privacy Policy
    • Terms of Service
    • Acceptable Use Policy
    • Service Level Agreement
    • Resource Abuse Policy
My Account

AHosting Blog

A Scheduled Event Has Failed? What Site Health Actually Checked

AHosting card on what a scheduled event has failed means: Site Health grades how overdue the oldest waiting event is, not a crash.

Matt Chrust

Director of Business Development, AHosting Matt has led business development at AHosting since the company’s founding in 2002. He writes about WordPress hosting infrastructure, server performance, and the evolving requirements of WordPress sites at scale.

Last Updated

October 6, 2026
Home » WordPress » A Scheduled Event Has Failed? What Site Health Actually Checked
  • What “A Scheduled Event Has Failed” Actually Means
    • A Clock Comparison, Not a Failure Report
    • Why Site Health Files It Under Recommended
  • A Scheduled Event Has Failed vs Is Late: Two Windows
    • Why DISABLE_WP_CRON Widens the Windows
    • Is Late Can Be Your Own Page Load
  • Why the Event It Names Is Rarely the One That Broke
    • It Names the Oldest Event Still Waiting
    • Each Event Leaves the List Before It Runs
    • A Dead Run Holds the Lock for a Minute
    • See the Whole Queue, Not One Name
  • Four Reasons a Scheduled Event Has Failed
    • Every Visit Was Answered From Cache
    • The Loopback That Starts Cron Fails
    • DISABLE_WP_CRON Is Set and No Server Cron Runs
    • A Run Died Partway Through
  • “A Scheduled Event Is Late”: When to Ignore It
  • How to Fix a Scheduled Event Has Failed, in Order
    • Decode Why a Scheduled Event Has Failed
  • A Scheduled Event Has Failed on AHosting Servers
  • A Practical Checklist When a Scheduled Event Has Failed
  • Frequently Asked Questions: A Scheduled Event Has Failed
    • Why are my scheduled WordPress posts not being published on time?
    • What does a scheduled event has failed mean in WordPress Site Health in 2026?
    • A scheduled event has failed vs is late: what is the difference in Site Health?
    • Which event does Site Health name when a scheduled event has failed?
    • Why does a scheduled event has failed appear on a well cached WordPress site?
    • DISABLE_WP_CRON vs server cron: which one stops a scheduled event has failed?
    • How do I list every overdue cron event in WordPress 7.1 in 2026?
    • Does AHosting run WP-Cron for my WordPress site automatically in 2026?
    • Can AHosting support help when the scheduled event has failed warning keeps returning?
    • Do I need an AHosting VPS for reliable WordPress cron jobs in 2026?
TL;DR

A scheduled event has failed does not mean the event it names tried to run and failed. Site Health compared each waiting event’s due time with the clock and found one more than five minutes overdue, or more than an hour if DISABLE_WP_CRON is set. The event it names is the oldest one still waiting, and often not the one that broke. Reload once after a minute, then find out why nothing ran wp-cron.php in time: visits answered entirely from cache, a broken loopback, WP-Cron disabled with no server cron, or a run that died partway.

What “A Scheduled Event Has Failed” Actually Means

A scheduled event has failed is the Site Health warning that reads like a crash report: The scheduled event, wp_version_check, failed to run. Read against the WordPress 7.1.2 code that writes it, the warning reports neither a crash nor an attempt to run. Site Health looked at the list of scheduled events, compared each due time with the current time, and found one that should have run more than five minutes ago.

Listen: Site Health compares due times with the clock, names the oldest waiting event, and a quiet, well-cached site can starve WP-Cron. By Matt Chrust, Director of Business Development, AHosting.

A Clock Comparison, Not a Failure Report

WordPress keeps its scheduled events, also called cron events, in a single list in the database, each one stamped with the time it is due. When you open Tools, Site Health, the scheduled-events test reads that list fresh. It consults no log of past runs, and it stores nothing about late events between visits. If any due time is more than five minutes in the past, the label becomes A scheduled event has failed. The word failed describes a missed deadline, not an error that anything caught.

Why Site Health Files It Under Recommended

Site Health grades the warning as recommended, not critical, and the message itself says your site still works. That grade is accurate. Core features ride on this list, as the WordPress Plugin Handbook chapter on cron explains: checking for updates and publishing scheduled posts both depend on it. A stalled list delays those jobs; it does not take the site down. The only critical result this test can return is a different message, It was not possible to check your scheduled events, which appears when the list is empty.

A Scheduled Event Has Failed vs Is Late: Two Windows

The same test has a milder label, A scheduled event is late, and one constant in wp-config.php moves both thresholds. This is the full grading, read from the test in the current release. Both warnings are graded recommended.

How overdue the oldest waiting event isDISABLE_WP_CRON not setDISABLE_WP_CRON set to true
Not due yetPassesPasses
Up to 5 minutesA scheduled event is latePasses
5 to 15 minutesA scheduled event has failedPasses
15 to 60 minutesA scheduled event has failedA scheduled event is late
More than 60 minutesA scheduled event has failedA scheduled event has failed
How WordPress 7.1 Site Health grades scheduled events — by how far past due the oldest waiting event is, read from the core test.
How Site Health decides that a scheduled event has failed A horizontal timeline with a vertical line marking now. To the right of now, an event that is not due yet passes the test. In the five minutes before now is the is late window, containing one event. Everything earlier than five minutes before now is the has failed window, containing two events. The leftmost, oldest event carries a highlight ring and the label named in the warning. A note explains that a hook which crashed the last run was removed from the list before it ran, so it does not appear on the timeline at all. A second note says that with DISABLE_WP_CRON set the windows become 15 to 60 minutes for late and more than an hour for failed. Site Health compares due times with the clock. WordPress 7.1.2, default thresholds. Nothing on this line tried to run and failed. A scheduled event has failed more than 5 minutes past due is late 0 to 5 min not due yet passes the test now named in the warning also overdue The oldest waiting event is the one Site Health names. A hook that crashed the last run left the list before it ran, so it is not on this line at all. With DISABLE_WP_CRON set: late means 15 to 60 minutes past due, failed means more than an hour.

Why DISABLE_WP_CRON Widens the Windows

Setting DISABLE_WP_CRON tells WordPress that something other than page loads runs the list, normally a server cron on a fixed interval. Site Health allows for the gap between those runs: 15 minutes before an event counts as late, and an hour before it counts as failed. Our own server-cron walkthrough uses a 15-minute interval for a standard site, which matches that allowance. Setting the constant with no server cron behind it is the one change guaranteed to produce this warning, just an hour later.

Is Late Can Be Your Own Page Load

Since WordPress 6.9, a page load starts the cron run at the very end of the request rather than near the start. The WordPress 6.9 performance field guide explains why: the old position could add up to a second to the time to first byte. One side effect matters here. When you open Site Health just as an event comes due, the test runs first and the cron run starts after it, so the screen can report a late event that your own visit is about to clear. Wait a minute and reload before you diagnose anything.

Why the Event It Names Is Rarely the One That Broke

The message names one event, and it is natural to blame the plugin that owns it. The code that runs the list says the name is a weaker clue than it looks.

It Names the Oldest Event Still Waiting

WordPress keeps the list in order of due time, and the test stops at the first event that crosses the threshold. So the name you see belongs to the most overdue event still in the list. On a site where nothing has run for hours, that is simply whichever job came due first, a core check such as wp_version_check just as easily as a plugin hook. It tells you the list stopped moving. It does not tell you why.

Each Event Leaves the List Before It Runs

When wp-cron.php works through the list, it handles due events in time order, inside one PHP process. For each one it first books the next occurrence if the event repeats, then removes the current entry, and only then runs the code attached to it. If that code ends the process with a fatal error, the event that caused it has already left the list. Everything queued behind it stays overdue, and Site Health names one of those. The event that broke the run is the one you will not see.

A Dead Run Holds the Lock for a Minute

Each run sets a lock when it starts and clears it when it finishes. A run that dies never clears its lock, and WordPress refuses to start another for 60 seconds, the default value of WP_CRON_LOCK_TIMEOUT. After that minute, the next qualifying visit starts a fresh run, which reaches the broken hook again only when that hook is next due. That is how a crashing job can produce a warning that comes and goes rather than one that never clears.

See the Whole Queue, Not One Name

To see every overdue event at once, use the WP-CLI command wp cron event list. It prints now for every event whose time has passed, however late, so add the next_run_gmt field to see how late each one really is. Without a shell, the free WP Crontrol plugin shows the same list in the dashboard. Two snapshots a few minutes apart tell you more than any single warning: an unchanged list means nothing ran, and a list that shrank but kept one plugin’s hooks overdue points at the code queued just ahead of them.

Four Reasons a Scheduled Event Has Failed

Every version of this warning comes down to one of two facts: nothing ran wp-cron.php in time, or something ran it and the run died. Four causes account for those, and each one leaves a different trace.

Every Visit Was Answered From Cache

WP-Cron has no clock of its own. The handbook is plain about it: WP-Cron is only triggered on page load. Each request that reaches WordPress checks the list and, if something is due, starts a run. A request answered by a full-page cache is served before WordPress gets as far as checking the list, and with a server-level cache such as LiteSpeed, PHP never starts at all. On a quiet site with a good cache, nearly every visit can be a cache hit, and a long stretch can pass without a single request that reaches the cron check. Our guide to LiteSpeed Cache and Cloudflare covers the two layers that can answer visits before WordPress does.

This is the cause the usual advice gets backwards. Clearing the cache makes the warning disappear for a while, because the next visits are built by WordPress again, and that is easy to mistake for a fix. Logging in to look usually has the same effect, since logged-in visits are normally not served from the page cache.

The Loopback That Starts Cron Fails

A page load does not run the jobs itself. It sends a short request from the site to its own wp-cron.php, waits a hundredth of a second, and moves on. If that request cannot reach the site, because a firewall or security rule blocks it, a password prompt guards the whole site, or the domain resolves somewhere else from the server, no run ever starts and nothing reports an error. Site Health tests the same route separately, and our guide to Your site could not complete a loopback request decodes that result.

DISABLE_WP_CRON Is Set and No Server Cron Runs

With DISABLE_WP_CRON set, page loads stop starting runs altogether. The constant is meant to be paired with a server cron, and a cron daemon works on the clock, not on visits: the cron(8) manual describes it waking up every minute to check what is due, and the Rocky Linux guide to cron jobs notes that tasks start on the daemon’s own notion of time. If that job was never added, was lost in a migration or points at the wrong folder, nothing runs the list, and after an hour the warning appears. Our walkthrough on when to disable WP-Cron covers the pairing step by step.

A Run Died Partway Through

A run can also start and not finish. A plugin hook can end it with a fatal error, a PHP time limit can stop it, or a process limit on the account can end it. The traces are the ones described above: the named event can change from one check to the next, and the PHP error log has an entry from the minute the run died that names the plugin file responsible. On shared hosting, our resource limit diagnostic tree shows how to tell an account limit from a code fault.

“A Scheduled Event Is Late”: When to Ignore It

The late label means the oldest waiting event is no more than five minutes overdue, or 15 to 60 minutes overdue when DISABLE_WP_CRON is set. On its own it can simply mean a run was about to start, or started a moment after the test.

A variant that comes up in searches is The scheduled event, action_scheduler_run_queue, is late to run. That hook belongs to Action Scheduler, the job queue that WooCommerce and many other plugins ship with. Its documentation says the queue runner is triggered by WP-Cron at most once a minute, so a hook due every minute is the first to look late whenever the gap between runs grows. It is a sensitive gauge, not a separate fault.

Ignore a late warning that clears on reload. Act on one that is still there after several reloads a few minutes apart, or one that turns into the failed label, because both mean the list is not moving.

How to Fix a Scheduled Event Has Failed, in Order

Work through these in sequence. Each step either clears the warning or narrows the cause, and the order puts the cheapest checks first.

  1. Wait a minute and reload Site Health. If the warning has gone, your own page load cleared it.
  2. Load your site’s wp-cron.php once by hand: your domain followed by /wp-cron.php. A blank page is the normal result, and the run continues after the page comes back. Wait a minute, then reload Site Health.
  3. If the warning cleared, the list can run and the trigger is the problem. Check the loopback test, look in wp-config.php for DISABLE_WP_CRON, and consider how much of your traffic is answered from cache.
  4. If a different event is named now, a hook is ending the run. Open the PHP error log in cPanel and read the entries from that minute. The plugin file named there is where to start.
  5. If nothing changed, the run did not start. Wait 60 seconds for the lock, try again, and check that no security rule refuses requests to wp-cron.php.
  6. For a quiet, well-cached site, stop depending on visits and run the list from a server cron, as our guide to WordPress cron jobs on shared hosting describes.

Decode Why a Scheduled Event Has Failed

The same steps as a lookup table, from the result you see to the cause and the first fix.

What you seeMost likely causeFirst fix
Late, and it clears on reloadYour own page load started the runNothing to fix
Failed, and it clears after loading wp-cron.php by handNothing triggered a run in timeFind the missing trigger: cache, loopback or the constant
Failed on a quiet site with a page cacheVisits never reach the cron checkAdd a server cron in cPanel
Failed, and the loopback test fails tooThe run request never arrivesFix the loopback first
Failed, and DISABLE_WP_CRON is setThe server cron is missing or brokenCheck Cron Jobs in cPanel
A different event named after each runA hook is ending the runRead the PHP error log from that minute
Nothing changes after a manual runThe run did not startWait out the lock, then check security rules
The AHosting Scheduled Event Decoder — what Site Health and a manual run show, the likely cause, and the first fix.

Scheduled Event Has Failed Decoder

Five questions about the warning and what happened when you tested it. The answer names the most likely reason the list stopped moving and the next thing to do.

—

Most likely:

Do this next:

Read from the WordPress 7.1.2 source. It cannot see your server, so treat the answer as where to start, not as a diagnosis.

A Scheduled Event Has Failed on AHosting Servers

Our shared servers run LiteSpeed, and LiteSpeed answers a cached page itself: on our servers a cached page consumes no entry processes, because no PHP process is started for it. That is good for speed and for staying inside a plan’s limits, and it is also why a quiet, well-cached site here can go a long stretch without running WP-Cron. In our July 2026 audit of one shared server, all 26 WordPress installs still used the default WP-Cron, and none of their 676 scheduled events was overdue. Sites with ordinary traffic kept their lists moving; the warning points at a quiet site, a broken trigger or a crashing hook.

We do not add a server cron to accounts by default. Cron Jobs in cPanel is available on our WordPress hosting plans and standard web hosting plans, and PHP runs as your own cPanel user, so a cron job runs WordPress with exactly the access the site already has. If wp-cron.php runs, the list drains and the warning still comes back, open a ticket with the event name Site Health shows and we will look at it with you.

Sites with heavy scheduled work, such as a large WooCommerce queue, can outgrow what a shared account allows. A VPS with full root access lets you set the cron schedule, the PHP time limits and the process counts yourself. One warning is not a reason to move; a queue that never catches up might be.

A Practical Checklist When a Scheduled Event Has Failed

  • Note the exact label, failed or late, and the event name it shows.
  • Wait a minute and reload Site Health before changing anything.
  • Load wp-cron.php once by hand, wait a minute, and reload again.
  • Compare the full list of overdue events before and after, not just the one name.
  • Check the loopback test result on the same Site Health screen.
  • Look in wp-config.php for DISABLE_WP_CRON, and in cPanel for a matching cron job.
  • Read the PHP error log for entries from the minute a run died.
  • On a quiet, well-cached site, move the list to a server cron rather than clearing the cache.
  • Never set DISABLE_WP_CRON until the server cron is confirmed to run.
  • Contact your host only when the list runs by hand, drains, and the warning still returns.

Frequently Asked Questions: A Scheduled Event Has Failed

Why are my scheduled WordPress posts not being published on time?

Typically because nothing ran WordPress cron when the post came due. Scheduled posts are published by a cron event, and WordPress only starts cron from a visit that is not answered by a page cache. On a quiet site, or one whose visits are all answered by a page cache, the publish time can pass with no such visit, and Site Health then reports that a scheduled event has failed. A server cron, or regular uncached visits with a working loopback, fixes it.

What does a scheduled event has failed mean in WordPress Site Health in 2026?

In other words, an event in the cron list is more than five minutes past its due time. In WordPress 7.1 Site Health compares each due time with the clock when you open the screen. It keeps no record of failed runs, and the warning does not mean the named event tried to run. With DISABLE_WP_CRON set, the threshold is one hour instead. The warning is graded recommended, and the site keeps working.

A scheduled event has failed vs is late: what is the difference in Site Health?

In practice it is only the size of the delay. Is late means the oldest waiting event is up to five minutes overdue, and has failed means more than five minutes. With DISABLE_WP_CRON set, late covers 15 to 60 minutes and failed covers anything past an hour. A late warning that clears when you reload a minute later can simply be your own page load starting the run.

Which event does Site Health name when a scheduled event has failed?

Specifically, the oldest event still waiting in the list. The list is kept in order of due time and the test stops at the first event past the threshold. Because WordPress removes each event from the list just before running it, a hook that crashes the run has already left the list, so the named event can be one queued behind the real cause. Read the PHP error log from the minute the run died.

Why does a scheduled event has failed appear on a well cached WordPress site?

Notably, a page answered by a full-page cache is served before WordPress reaches the step that starts cron. On a quiet site where nearly every visit is a cache hit, a long stretch can pass without a request that runs the cron list. Logging in to check can clear the warning, because logged-in visits are normally not served from the page cache, which hides the cause. A server cron removes the dependence on visits.

DISABLE_WP_CRON vs server cron: which one stops a scheduled event has failed?

Together, and never the constant alone. DISABLE_WP_CRON only stops page loads from starting runs and widens the Site Health threshold to one hour. Without a server cron running the list on a schedule, nothing runs it at all, and the warning returns once that hour has passed. Add the cron job in cPanel first, confirm that it runs, and only then set the constant in wp-config.php.

How do I list every overdue cron event in WordPress 7.1 in 2026?

First and foremost, use WP-CLI, where wp cron event list shows every scheduled event with its hook and due time. WP-CLI prints now for every event that is already due, however late, so add the next_run_gmt field to see how late each one is. Without a shell, the free WP Crontrol plugin shows the same list inside the dashboard. Two snapshots a few minutes apart show whether the list is moving.

Does AHosting run WP-Cron for my WordPress site automatically in 2026?

Indeed, WordPress runs its own WP-Cron on our servers exactly as it does anywhere, started by visits that are not answered from a page cache. We do not add a server cron to accounts by default, so a quiet or heavily cached site depends on those visits. Cron Jobs in cPanel is available on our WordPress and web hosting plans, and PHP runs as your own user, so you can add one without a ticket.

Can AHosting support help when the scheduled event has failed warning keeps returning?

Above all, run the checks in this guide first: reload after a minute, load wp-cron.php by hand, check the loopback test and look for DISABLE_WP_CRON. Each one rules out a cause. If wp-cron.php runs, the list drains and the warning still comes back, open a ticket with the event name Site Health shows and we will look at it with you.

Do I need an AHosting VPS for reliable WordPress cron jobs in 2026?

Fortunately not for this warning alone. Every cause in this guide, from cache-only traffic to a missing server cron or a crashing hook, is fixed inside a shared account. A VPS makes sense when scheduled work, such as a large WooCommerce queue, keeps outgrowing the limits of a shared plan, or when you want to set PHP time limits and process counts yourself.

Related posts:

AHosting card on the authorization header is missing, showing the two Site Health failure labels and the four cases a flush misses.The Authorization Header Is Missing? What Site Health Tested, and the Fix AHosting diagram of why recommended modules are missing stays a warning: imagick falls back to gd, zip to zlib, mod_xml to simplexml and xmlreader.One or More Recommended Modules Are Missing: How to Read the WordPress Site Health Warning and Fix It on Shared Hosting Autoloaded options warning card reading your visitors never see it, you do on every admin click, beside the 800 KB and 150 KB WordPress thresholdsAutoloaded Options Could Affect Performance: How to Read the Site Health Warning and Clear It on Shared Hosting AHosting card on the Site Health notice you should use a persistent object cache, showing four of the seven limits that print it.You Should Use a Persistent Object Cache: What WordPress Site Health Actually Measures
«Installation Failed: Could Not Create Directory? Find the Folder, Then the Cause
Log Errors to a Potentially Public File? What Site Health Checks»

Categories

  • CMS
  • Concrete5
  • Drupal
  • FFmpeg / Video Hosting
  • Hosting Guides
  • How To
  • Joomla
  • Security
  • SEO
  • Uncategorized
  • Video Content
  • Web Hosting News
  • WooCommerce
  • WordPress

Lets Connect!

  • X
  • Facebook
  • LinkedIn
  • Instagram
  • YouTube
  • Pinterest
Ahosting Logo

Hosting

  • WordPress Hosting
  • Web Hosting
  • FFmpeg Hosting
  • WooCommerce Hosting
  • Reseller Hosting
  • VPS Hosting
  • Dedicated Server

Domain

  • Register a Domain
  • Domain Transfer
  • Premium SSL Certificate

Support

  • Knowledge Base
  • Abuse Report
  • Submit A Ticket

Company

  • Compare Hosts
  • About Us
  • Datacenter
  • Contact Us
  • Blog
  • Sitemap

Legal

  • Privacy Policy
  • Terms of Service
  • Acceptable Use Policy
  • Service Level Agreement
  • Resource Abuse Policy
  • Hosting
    • WordPress Hosting
    • Web Hosting
    • FFMpeg Hosting
    • WooCommerce Hosting
    • Reseller Hosting
    • VPS Hosting
    • Dedicated Server
  • Domain
    • Register a Domain
    • Domain Transfer
    • Premium SSL Certificate
  • Support
    • Knowledge Base
    • Abuse Report
    • Submit A Ticket
  • Company
    • About Us
    • Datacenter
    • Contact Us
    • Blog
    • Sitemap
  • Legal
    • Privacy Policy
    • Terms of Service
    • Acceptable Use Policy
    • Service Level Agreement
    • Resource Abuse Policy

Copyright © 2026 All Rights Reserved

Ahosting, Inc. BBB Accredited Business, A+ rating
Facebook X/Twitter Instagram LinkedIn YouTube
WordPress hosting WP Bronze 5 sites · 10 GB $2.79/mo 36-month term · $100.44 today 36-mo · $100.44 · renews same Order now →

WordPress

WP Bronze $2.79/mo WP Silver $3.79/mo WP Gold $4.79/mo Compare WordPress

WooCommerce

WooStart $3.79/mo WooPower $16.79/mo Compare WooCommerce

FFmpeg

FFStart $16.79/mo FFPower $28.79/mo Compare FFmpeg

Web hosting

Bronze $2.79/mo Silver $3.79/mo Gold $4.79/mo Compare Web hosting
Order WP Bronze · $2.79/mo 36-mo