Strange cron job behavior and how to solve it?

Cron jobs in the past are cron jobs that have not had the opportunity to run yet.

Very Few Visitors

Unless you system has a system level cron that is configured to trigger WP Cron at predictable intervals you won’t be able to use WP Cron for precise timekeeping.

This is because WP Cron will be triggered when users visit in a non-blocking self request to wp-cron.php, so if nobody visits your site, no cron jobs can run.

WP Cron is Turned Off

Perhaps WP_CRON is set to false in wp-config.php? This is common on sites that rely instead on manually triggering cron via system cron.

Either re-enable it, or fix the system cron that was meant to manually trigger WP Cron

PHP Errors

It could be that the next cron job due also causes a fatal error, preventing it from completing and holding up the queue. Check your error logs.

Very Large Backlog/Jobs

Normally WP Cron can only run for a short period before it runs into the same time limit that stops webpages from loading forever. Likewise it would have the same memory limits.

So if your site has a lot of jobs, it may not be able to process all of them in time. Likewise, a custom job may take too long and not have enough time to complete. Usually this will show up in a PHP error log as time limit or memory limit errors

Main Site Errors

Because WP Cron is triggered by a non-blocking request at the very end of a page load, if your page crashes/breaks at the very end it may not have the chance to make the request. If this happens after the footer you might not notice this happens