Introduction

Disabling wp-cron.php is a valid performance optimization only if a real scheduler replaces it. Many sites set DISABLE_WP_CRON in wp-config.php and never create the system cron job, which leads to missed scheduled posts, stale WooCommerce emails, and plugins that appear randomly broken.

Symptoms

  • Scheduled posts stay in the future instead of publishing
  • WooCommerce follow-up emails or subscription renewals stop running on time
  • wp cron event list shows overdue events piling up
  • The issue started after disabling wp-cron for performance tuning

Common Causes

  • DISABLE_WP_CRON was enabled without creating a server-side cron job
  • The system cron runs under a user that cannot execute PHP or access WordPress
  • The cron command uses the wrong path to WordPress or PHP
  • Basic auth or a firewall blocks the HTTP call to wp-cron.php

Step-by-Step Fix

  1. 1.Check whether wp-cron is disabled and events are overdue
  2. 2.Confirm the configuration problem before changing plugin settings.
bash
wp config get DISABLE_WP_CRON
wp cron event list --due-now
  1. 1.Create a real server cron job
  2. 2.Use WP-CLI if possible because it is more reliable than hitting wp-cron.php over HTTP.
bash
*/5 * * * * /usr/local/bin/wp cron event run --due-now --path=/var/www/html >/dev/null 2>&1
  1. 1.Verify the cron user can execute PHP and access the site files
  2. 2.Cron commonly fails because the PATH, PHP binary, or WordPress path differs from an interactive shell.
bash
sudo -u www-data /usr/local/bin/wp cron event run --due-now --path=/var/www/html
  1. 1.Re-run overdue jobs and confirm the queue clears
  2. 2.After the real cron is working, flush the backlog and watch new events trigger on schedule.
bash
wp cron event run --due-now
wp cron event list

Prevention

  • Never enable DISABLE_WP_CRON without provisioning a server cron in the same change
  • Prefer WP-CLI cron execution over public HTTP calls to wp-cron.php
  • Include scheduled task verification in post-deploy checks
  • Monitor overdue cron events on busy WordPress and WooCommerce sites

Verification

After applying the fix, verify the exact symptom that made the incident visible instead of relying on one green log line. Re-run the command, request, deployment, or browser path that failed before the change and capture the new output for the incident record.

  • Confirm the original error message no longer appears in application, platform, or edge logs.
  • Check the affected dependency path from the client side and from the server side when both are available.
  • Watch the next scheduled job, deploy, cache refresh, or certificate renewal cycle so the fix survives the normal operating path.
  • Record the final configuration value, command output, and timestamp in the runbook for WordPress wp-cron Disabled but No System Cron Is Running.

Rollback

If the fix changes routing, credentials, certificates, state, cache behavior, or runtime configuration, keep a rollback path ready before applying it to production. Save the previous configuration, identify the owner of the affected service, and define the signal that will trigger rollback.

  1. 1.Restore the last known-good configuration or state reference if validation shows a wider blast radius.
  2. 2.Re-run the same diagnostic checks from the fix section to confirm the rollback returned the system to the previous behavior.
  3. 3.Leave a short note explaining why the attempted fix was reverted so the next responder does not repeat the same change.

Operational Notes

Use this guide as an incident workflow, not as a blind checklist. The safest order is to collect the current state, confirm the narrowest failing component, apply one focused change, and then re-test the same path that failed. Avoid combining unrelated fixes during WordPress wp-cron Disabled but No System Cron Is Running; otherwise the team will not know which change restored service or which change caused a later regression.

For production systems, capture command output before and after each change. Include timestamps, hostnames, environment names, account IDs, namespaces, certificate names, or configuration keys when they are relevant. These details make the guide useful during a future incident and help separate a real recurrence from a similar-looking but unrelated failure.

Escalate when the failing path crosses a boundary your team does not own, such as a managed cloud control plane, identity provider, external DNS service, payment gateway, or shared network appliance. Share the exact failing request, correlation ID, command output, and change window with the owning team. Keep customer-facing mitigation separate from root-cause repair: it is often safer to route around the broken dependency first, then schedule the permanent cleanup after traffic is stable.

  • [WordPress troubleshooting: Fix Child Theme Not Enqueuing Parent Styles Correc](child-theme-not-enqueuing-parent-styles-correctly)
  • [Fix Database Connection Error Custom Socket Path Issue in WordPress](database-connection-error-custom-socket-path)
  • [Fix Debug Log Growing Deprecated Warnings Notices Issue in WordPress](debug-log-growing-deprecated-warnings-notices)
  • [Fix Fix Contact Form Not Sending On Wordpress Site Issue in WordPress](fix-contact-form-not-sending-on-wordpress-site)
  • [Fix Fix Open Basedir Restriction Blocking Wordpress Issue in WordPress](fix-open-basedir-restriction-blocking-wordpress)

<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "TechArticle", "headline": "WordPress wp-cron Disabled but No System Cron Is Running", "description": "Resolve missed WordPress scheduled tasks by replacing disabled wp-cron with a working server cron and validating due events with WP-CLI.", "url": "https://www.fixwikihub.com/wordpress-wp-cron-disabled-no-system-cron", "publisher": { "@type": "Organization", "name": "FixWikiHub", "url": "https://www.fixwikihub.com" }, "author": { "@type": "Person", "name": "FixWikiHub Editorial Team" }, "datePublished": "2026-04-10T03:17:00.000Z", "dateModified": "2026-04-10T03:17:00.000Z" } </script>