Gérer les crons WordPress en crontab

Le cron (serveur) est le gestionnaire des tâches devant être exécutées à un moment précis et chaque utilisateur les indique dans un fichier crontab. Mais savez-vous pourquoi il est bénéfique de le faire ? Et comment ? On vous explique tout.

Pourquoi le crontab ?

Ce qu’il faut avant tout savoir c’est que sur WordPress, nativement, les crons se lancent à un interval de 15 minutes. En réalité, je devrais même plutôt dire qu’ils sont censés se lancer toutes les 15 min.

Cette nuance porte tout son sens lorsque l’on connaît le mécanisme exacte des crons de WordPress. En effet ces derniers ne se lancent que lorsque quelqu’un visite le site en front, c-à-d que si votre site n’a aucun trafic, les crons ne se lanceront pas.

En théorie cela n’arrive pas, mais dans la pratique lorsqu’on a besoin de réaliser une/des tâche(s) bien particulière(s) durant la nuit, le manque de trafic va impacter le lancement. De même, en pleine journée, les heures creuses pourraient causer le retardement d’une newsletter ou la publication d’un article programmé.

C’est donc problématique et il faut trouver une alternative : le crontab.

Le cron (serveur) est le gestionnaire des tâches devant être exécutées à un moment précis et chaque utilisateur les indique dans un fichier crontab. De cette manière les intervalles et récurrences seront parfaitement respectés. On va donc mettre en place un crontab pour systématiquement lancer sur un intervalle de 15 minutes les crons de WordPress.

4 étapes pour mettre en place les crons WordPress en Crontab

Prérequis

Vous allez avoir besoin d’un accès SSH et de WP-Cli pour/sur votre serveur.

SSH

Si vous n’avez d’accès SSH, demandez-le ou alors c’est GAME OVER.

WP-Cli

Pour WP-Cli, téléchargez-le simplement dans sa version phar :

wget https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

Puis rendez-le exécutable :

chmod +x wp-cli.phar

1. Désactiver les crons de wordPress

Il faut s’assurer que les crons de WordPress sont désactivés, puisqu’on va les lancer d’une méthode alternative directement depuis le serveur. On ajoute dans le wp-config la ligne suivante :

define( 'DISABLE_WP_CRON', true );

2. Ajouter un crontab

Depuis le terminal de votre serveur, éditez les crontab :

crontab -e

3. Ajouter WordPress dans les crontab

En se basant sur le tableau des arguments suivant

VarTypeDescription
{path_to_wp}stringpath to the WordPress root folder
{path_to_php}stringpath to php
{path_to_wp_cli_phar}stringpath to the wp-cli.phar package. For Be API, it’s generally {wp_content_folder}/tools/wp-cli.phar. If you have wp cli installed and binded, just use wp.
{wp_content_folder}stringdepending on if project is running with composer or not : content or wp-content

Single site

*/15 * * * * cd {path_to_wp} && {path_to_php} {path_to_wp_cli_phar} cron event run --due-now

Exemple:

*/15 * * * * cd /home/beapi/public_html/ && php content/tools/wp-cli.phar cron event run --due-now

Multisite

*/15 * * * * cd {path_to_wp} && for url in $({path_to_php} {path_to_wp_cli_phar} site list --field=url); do {path_to_php} {path_to_wp_cli_phar} cron event run --due-now --url=$url; done;

Exemple:

*/15 * * * * cd /home/beapi/public_html/ && for url in $(php71 content/tools/wp-cli.phar site list --field=url); do php71 content/tools/wp-cli.phar cron event run --due-now --url=$url; done;

Changer la récurrence d’un crontab

Nous avions vu que par défaut les crons de WordPress tournaient toutes les 15 minutes, c’est pourquoi dans les exemples du dessus nous avons également réalisé des crontab qui tourneront toutes les 15 minutes.
Maintenant pour une raison X ou Y, si vous voulez lancer un crontab personnalisé basé sur une autre récurrence, il faudra changer cette commande.

C’est pourquoi, pour y voir plus clair et/ou réaliser une récurrence différente, je vous invite à utiliser ce générateur en ligne : https://crontab-generator.org


Et voilà 🤗 maintenant les crons de WordPress vont tourner de manière autonomes en WP Cli grâce au crontab.

Publié par

Maxime CULEA

Développeur back-end WordPress et Community Manager, il partage énormément son expertise dans les WordCamps, les réseaux sociaux, les projets open-source, extensions, etc. De nature ouverte, laissez lui un commentaire / une question et il se fera un plaisir d'y répondre.