To understand WP cron, let me quote the following text from Cavalcade documentation…
wp-cron is not actually a real task scheduler, and doesn’t actually operate like cron. Instead, it’s a pseudo-cron system, which is run as a loopback HTTP call when you access a page on the site (essentially, the page “forks” itself to run scheduled tasks). This is fine for high traffic single-sites, but lower traffic sites might not have their cron activated if the site isn’t viewed.
As you can see, even if a site has moderate traffic, if the site uses aggressive caching techniques, it is possible for real traffic to never hit PHP or WordPress to process a request. When wp-cron fails, a number of things can fail… a scheduled may not get published on time, a newsletter may not be sent as scheduled, an important WordPress security may not be applied, a backup schedule may have been missed, etc.
Cavalcade offers an excellent way to prevent such failures. It is more suitable for multi-site networks with hundreds of cron entries. For single sites, it is easier to handle a failure in wp-cron using wp-cli tool and a server cron.
Most common alternative is to disable internal WP cron and trigger it externally using
wp-cron.php file and a server cron. If you are using this alternative method, then please remove cron entry and remove the corresponding entry in
wp-config.php file, as wp-cli wouldn’t work if internal cron is disabled.
Let’s make sure we are ready to use the internal wp-cron by running the following command…
wp --path=/path/to/wordpress cron test
You’d see a success message… “Success: WP-Cron spawning is working as expected.“.
Most common error message is… “Error: The DISABLE_WP_CRON constant is set to true. WP-Cron spawning is disabled.” In this case, please disable the line in
wp-config.php that disables wp-cron.
Now, it is time to set up a server cron that runs every minute like this…
* * * * * /path/to/wp-cli --path=/path/to/wordpress cron event run --due-now &> /dev/null
The 5 stars indicate a schedule to execute the command every minute. The command that follows executes cron events that are due now. Please make sure you provide full path to wp-cli and your WP site installation directory. I have tested the above in multiple sites on various servers. So far, it has been the most effective way to handle the failures in WP-Cron gracefully on single sites. If you run a multi-site network or a complex site with hundreds of crons, I’d highly recommend Cavalcade.