Définition
WP-Cron est le mécanisme interne de WordPress censé imiter le service cron de Linux pour exécuter des tâches planifiés en arrière-plan sur WordPress. Ceci permet, entre autres, d'effectuer les mises à jour automatiques, les préchauffage de cache et les tâches de maintenances de WooCommerce. Les plugins ayant accès à cette mécanisme, ceux-ci ipeuvent ajouter des tâches à exécuter afin de planifier des actions supplémentaires. Vous pouvez en savoir plus sur notre billet de blog dédié : Qu’est-ce que le CRON de WordPress ?
WP-Cron a été initialement pensé pour remplacer cronjob sur les formules d'hébergements web ne permettant pas d'ajouter un script sur le service cron de Linux. Par conséquent, le WP-Cron déclenche l'exécution des tâches grâces aux requêtes effectués sur le fichier wp-cron.php, lors de requêtes AJAX effectués sur wp-admin/admin-ajax.php, et/ou lors du chargement de la page. Ainsi, le facteur déclencheur de ces requêtes HTTP reste inévitablement la visite du site web. Par conséquent, le chargement de la page sera encombré par exécution des tâches WP-Cron et les performances pourront ainsi être diminués. Pire, certains plugins ajoutent des tâches beaucoup trop longues sur Wp-Cron, au point de dépasser les temps d'attentes possible en HTTP. Et le plus dérrangeant, l'exécution des tâches pourraient être retardés car il n'y a pas de visiteur sur le site au moment où la tâche aurait dû être exécuté. Certains tâches pourraient donc cumuler, et à l'ouverture de la page par un visiteur, il se peut que des dizaines voire centaines de tâches planifiés sont lâchés, pénalisant grandement le temps de chargement pour ce malheureux visiteur.
Déclencher WP-Cron avec un cron job permet donc d'assurer l'exécution des tâches planifiés avec WP-Cron sans affecter les visiteurs : wp-cron.php sera alors exécuté à intervalle régulier, qu'il y ait ou non de visiteurs, et les visiteurs, eux, peuvent immédiatement ouvrir le site sans attendre que des tâches en attente ne soient exécutés.
Procédure
WP-Cron est le mécanisme interne de WordPress censé imiter le service cron de Linux pour exécuter des tâches planifiés en arrière-plan sur WordPress. Ceci permet, entre autres, d'effectuer les mises à jour automatiques, les préchauffage de cache et les tâches de maintenances de WooCommerce. Les plugins ayant accès à cette mécanisme, ceux-ci ipeuvent ajouter des tâches à exécuter afin de planifier des actions supplémentaires. Vous pouvez en savoir plus sur notre billet de blog dédié : Qu’est-ce que le CRON de WordPress ?
WP-Cron a été initialement pensé pour remplacer cronjob sur les formules d'hébergements web ne permettant pas d'ajouter un script sur le service cron de Linux. Par conséquent, le WP-Cron déclenche l'exécution des tâches grâces aux requêtes effectués sur le fichier wp-cron.php, lors de requêtes AJAX effectués sur wp-admin/admin-ajax.php, et/ou lors du chargement de la page. Ainsi, le facteur déclencheur de ces requêtes HTTP reste inévitablement la visite du site web. Par conséquent, le chargement de la page sera encombré par exécution des tâches WP-Cron et les performances pourront ainsi être diminués. Pire, certains plugins ajoutent des tâches beaucoup trop longues sur Wp-Cron, au point de dépasser les temps d'attentes possible en HTTP. Et le plus dérrangeant, l'exécution des tâches pourraient être retardés car il n'y a pas de visiteur sur le site au moment où la tâche aurait dû être exécuté. Certains tâches pourraient donc cumuler, et à l'ouverture de la page par un visiteur, il se peut que des dizaines voire centaines de tâches planifiés sont lâchés, pénalisant grandement le temps de chargement pour ce malheureux visiteur.
Déclencher WP-Cron avec un cron job permet donc d'assurer l'exécution des tâches planifiés avec WP-Cron sans affecter les visiteurs : wp-cron.php sera alors exécuté à intervalle régulier, qu'il y ait ou non de visiteurs, et les visiteurs, eux, peuvent immédiatement ouvrir le site sans attendre que des tâches en attente ne soient exécutés.
Dans un premier lieu, il sera nécessaire de désactiver l'exécution de WP-Cron lors du chargement d'une page. Ceci s'effectue en ajoutant la ligne suivante dans votre fichier wp-config.php :
define( 'DISABLE_WP_CRON', true );
Pour cela, rendez-vous dans votre client FTP, connectez-vous à votre compte FTP et éditez le fichier wp-config.php :
Dans votre panneau de contrôle ISPConfig, rendez-vous sur Sites > Tâches cron et cliquez sur "Nouveau cron" :
Renseignez ensuite un cronjob qui s'exécute toutes les minutes et qui exécute le fichier wp-cron.php :
La commande à exécuter, "php7.4 [web_root]/wp-cron.php" pourra être ajusté :
La case à cocher "Log output" permet le loguer la sortie de wp-cron dans le dossier "private" de votre compte FTP. Vous pouvez le cocher si vous souhaitez disposer des sorties stdout et stderr de wp-cron.php, utile par exemple lors des débogages.
Vous pouvez en savoir plus sur les tâches planifiés cron job sur votre VPS sur l'article dédié.
Par défaut, les sites créés sur ISPConfig ne sont associés à aucun compte client :
Si toutefois vous avez volontairement associé votre site web à un compte client ou revendeur créé sur ISPConfig, alors ce compte pourrait disposer de certaines limites cron qui pourraient empêcher le bon fonctionnement du cron. Pour vérifier ces limites, rendez-vous dans l'édition du compte client/revendeur dans l'onglet Limits :
Assuez-vous alors d'avoir bien choisi Full cron afin que le cronjob ne s'exécute pas dans un jail chroot limité qui ne dispose pas de toutes les fonctionnalités nécessaires pour le bon fonctionnement du cronjob :
Assurez-vous également de mettre le délai minimum entre deux exécutions sur "1" afin que le cronjob puisse s'exécuter toutes les minutes.
Si vous avez déjà créé des crons jobs et/ou des utilisateurs shell pour le site, il sera nécessaire de supprimer tous les cronjobs existants et tous les utilisateurs shells, et ensuite de les recréer, afin que ISPConfig les passe d'un environnement chroot à un environnement full cron.
Pour aller plus loin
Par défaut, les sites créés sur ISPConfig ne sont associés à aucun compte client :
Si toutefois vous avez volontairement associé votre site web à un compte client ou revendeur créé sur ISPConfig, alors ce compte pourrait disposer de certaines limites cron qui pourraient empêcher le bon fonctionnement du cron. Pour vérifier ces limites, rendez-vous dans l'édition du compte client/revendeur dans l'onglet Limits :
Assuez-vous alors d'avoir bien choisi Full cron afin que le cronjob ne s'exécute pas dans un jail chroot limité qui ne dispose pas de toutes les fonctionnalités nécessaires pour le bon fonctionnement du cronjob :
Assurez-vous également de mettre le délai minimum entre deux exécutions sur "1" afin que le cronjob puisse s'exécuter toutes les minutes.
Si vous avez déjà créé des crons jobs et/ou des utilisateurs shell pour le site, il sera nécessaire de supprimer tous les cronjobs existants et tous les utilisateurs shells, et ensuite de les recréer, afin que ISPConfig les passe d'un environnement chroot à un environnement full cron.