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 > /dev/null 2>&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 > /dev/null 2>&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.