Skip to main content

Cron Isn’t Firing on Time

Several Benecaster features — manual grant expiry, payment-failure reminders, renewal reminders, episode availability unlocks, email delivery, license validation, analytics snapshots — run on a scheduled background task called WP-Cron. If these features feel late or stuck, the most likely cause is how WP-Cron works by default.

How WP-Cron Works

WordPress’s built-in cron system (wp-cron.php) does not run on a real time-based schedule. It piggybacks on inbound web traffic: when someone visits any page on your site, WordPress checks whether any scheduled tasks are due and runs them at that moment.

On a high-traffic site this is effectively real-time. On a low-traffic site — a new podcast still growing its audience, a site that gets most of its visits at specific times — there can be gaps of hours between cron firings. A task scheduled for 3:00 AM may not run until the first visitor arrives the next morning.

What You Might Notice

What feels wrong Underlying cron hook
Manual grants not expiring on time benecaster_manual_grant_expiry (hourly)
Renewal reminder emails never arrive benecaster_renewal_reminder_cron
Episode availability unlocks are late benecaster_availability_check
Emails stuck in the queue benecaster_process_email_queue
License status feels stale after a plan change benecaster_license_validation
Analytics daily snapshots have gaps benecaster_analytics_daily_snapshot
Feed sync not picking up new episodes benecaster_feed_sync
GDPR / analytics retention purges not running benecaster_retention_purge

First Check

Visit any wp-admin page. That’s the fastest way to trigger WP-Cron immediately — admin requests fire cron just like front-end visits. If the delayed action runs shortly after, the cron itself is fine and it was simply waiting for a visitor.

Install WP Crontrol (free plugin). It shows every scheduled benecaster_* event with its next run time. If an event is listed as overdue by hours, WP-Cron has been quiet on your site. If an event is missing from the list entirely, it may not have been registered — contact support.

Check for DISABLE_WP_CRON. Search your wp-config.php for this line:

define( 'DISABLE_WP_CRON', true );

If it’s present, WordPress’s built-in cron is fully disabled. This is the right setting for a site using a real cron, but if no real cron is actually in place, all scheduled tasks will never run. Either remove the line or add a real cron as described below.

The Durable Fix

WordPress’s built-in cron is inherently traffic-dependent. The reliable solution is a real OS-level cron job on your host — this is a host or developer task, not something Benecaster can configure from inside the plugin.

To set this up, ask your web host or developer to run one of these every 5 minutes:

Option 1 — HTTP ping (works on any host with curl):

*/5 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron >/dev/null

Replace example.com with your site’s domain.

Option 2 — WP-CLI (preferred on managed hosts that support it):

*/5 * * * * cd /var/www/html && wp cron event run --due-now >/dev/null 2>&1

Replace /var/www/html with your WordPress root path.

Once a real cron is in place, also add this to wp-config.php to prevent double-firing (both the real cron and visiting traffic trying to run scheduled tasks):

define( 'DISABLE_WP_CRON', true );

For full setup instructions, see WordPress’s official guide: Hooking WP-Cron Into the System Task Scheduler.

Most managed WordPress hosts (WP Engine, Kinsta, Flywheel, etc.) configure a real system cron by default. If you’re on one of these hosts and still seeing delays, check with their support team that WP-Cron is enabled and not throttled.

See Also