Better wp-cron using linux’s crontab

WordPress has something called wp-cron. If you haven’t read about it, its fine. But please be aware that you cannot live without it! That is why, I am not asking you to disable wp-cron.

Disable wp-cron

Still, we need to disable WordPress default wp-cron behaviour by adding following line to wp-config.php file:

define('DISABLE_WP_CRON', true);

Setup a real cronjob

From your Linux terminal, first open crontab:

crontab -e

Then add a line like below in it.

*/10 * * * * curl http://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
<span style="font-family: 'Open Sans', Arial, sans-serif; line-height: 24px;">OR</span>
*/10 * * * * cd /var/www/example.com/htdocs; php /var/www/example.com/htdocs/wp-cron.php?doing_wp_cron &gt; /dev/null 2&gt;&amp;1

Please make sure you use correct path to wp-cron.php.

Alternately, you can also use WP-Cli

*/10 * * * * cd /var/www/example.com/htdocs; wp cron event run --due-now&nbsp;&gt; /dev/null 2&gt;&amp;1

Above will run wp-cron every 10 minutes. You can change */10 to */5 to make it run every 5 minutes.

Difference between two-lines is, first one uses PHP-FPM (or PHP-CGI) and second one uses PHP-CLI. CLI scripts do not have time limits. Depending on your setup, it may be desirable or undesirable.

Is it recommend for high-traffic site?

I haven’t digged into wp-cron a lot but what I know is that it executes on every page-load. So if there is a long running process which gets triggers by wp-cron, it will delay page loading for that user.

Using crontab, wp-cron is run by independent PHP process. So it will not interfere with any visitors page-request.

Because of this, we highly recommend running wp-cron via linux crontab rather than WordPress’s default way, irrespective of size or traffic of your site.