CRON et WP Rocket

Dans cette documentation

Qu’est-ce que Cron ?

Cron est un utilitaire standard dans les systèmes Unix et Linux, il est utilisé pour planifier l'exécution automatique de commandes à des intervalles spécifiques. Par exemple, vous pourriez avoir un script qui produit des statistiques Web et vous voulez qu'il fonctionne une fois par jour à une heure précise. Ou imaginez que vous avez besoin d'exécuter un script PHP en semaine, toutes les 2 heures par exemple. 

Vous ne pouvez pas faire ces tâches manuellement et c'est alors que Cron devient utile. Ces commandes impliquant Cron sont appelées des " tâches cron.".


WP Cron VS "Véritable" tâche Cron

WordPress possède une fonctionnalité appelée WP-Cron. WP Cron est une fonction intégrée pour l'automatisation qui permet de programmer des tâches automatisées, comme la publication de messages, les tâches de maintenance, les contrôles de mise à jour et par de nombreux plugins comme WP Rocket qui doivent automatiser leurs fonctions.

WP-Cron n’est pas une réelle tâche cron, c’est même une “fausse tâche cron”. Ces tâches sont déclenchées lorsque quelqu'un visite votre site : pendant le chargement des pages PHP, WP Cron vérifie la base de données pour voir s'il y a des tâches programmées à exécuter ;

La façon dont WP Cron fonctionne a quelques inconvénients :

  • Lorsque vous utilisez un plugin de mise en cache comme WP Rocket, aucun PHP n'est exécuté en front, donc s'il n'y a aucune activité sur WP Admin pendant un certain temps, les processus WP Cron cesseront d'être déclenchés.
  • C'est aussi un problème potentiel sur les sites à fort trafic, car chaque demande de page peut générer un processus qui utilise les ressources du serveur.
  • Ce fichier peut être utilisé comme cible d'une attaque DOS

Astuce : Pour vérifier si WP-Cron peut fonctionner sur votre site WordPress : WP-Cron Status Checker
Après l'activation, visitez votre tableau de bord et recherchez le widget WP-Cron Status Checker.

Mise en place d'une véritable tâche Cron

En raison des inconvénients de WP Cron, il est toujours recommandé de configurer une véritable tâche Cron sur votre serveur au lieu de s'appuyer sur WP Cron.

  1. Si vous voulez créer une vraie tâche Cron, vous devez d'abord désactiver WP Cron, pour qu'il ne soit pas exécuté chaque fois que quelqu'un charge une de vos pages. Pour le désactiver, ouvrez le fichier wp-config.php dans votre dossier principal WordPress et ajoutez la ligne suivante avant la ligne /* C'est tout, ne touchez pas à ce qui suit ! Bon blogging ! */ (ou /* That's all, stop editing! Happy blogging. */) :

    define('DISABLE_WP_CRON', true);
    	
  2. Ajoutez ensuite une nouvelle tâche Cron via la gestion de votre d'hébergement web. Vous pouvez régler la tâche pour qu'elle soit exécutée toutes les 5 ou 10 minutes.
    N’oubliez pas de remplacer votredomaine.com avec votre propre domaine :
    wget -q -O - https://votredomaine.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
    	

    Chaque serveur a différentes façons d'ajouter les tâches Cron, donc si vous n'êtes pas sûr de la façon de le faire, vous pouvez demander à votre hébergeur de vous aider.
    Vous pouvez visionner cette courte vidéo si vous utilisez cPanel: https://recordit.co/A4Jj1Kg7x9

Mise en place d'une véritable tâche Cron pour Multisite

Si vous utilisez WordPress Multisite, vous devez déclencher le CRON sur chaque site du réseau.

  1. Si vous voulez créer une véritable tâche Cron, vous devez d'abord désactiver WP Cron, afin qu'il ne soit pas exécuté à chaque fois que quelqu'un charge l'une de vos pages. Pour le désactiver, ouvrez le fichier wp-config.php dans votre dossier principal WordPress et ajoutez la ligne suivante avant la ligne "/* That's all, stop editing! Happy blogging. */"

    define('DISABLE_WP_CRON', true);
    	
  2. Créez un fichier sur votre dossier racine WordPress appelé custom-cron-multisite.php et ajoutez-y le code suivant.
    <?php
    require('wp-load.php');
    
    if ( is_multisite()) {
    	$sites = get_sites();	
    	foreach ($sites as $site ) {
    		$site_url = get_site_url($site->blog_id);			
    		switch_to_blog( $site->blog_id );
    		wp_suspend_cache_addition(true);
    		$command = $site_url.'/wp-cron.php?doing_wp_cron';
    		wp_remote_get( $command );						  
    		wp_suspend_cache_addition(false);
    		restore_current_blog();	
    		sleep(3); 
    	}			
    }
    	

    Si vous avez beaucoup de sites web sur votre réseau, vous devrez peut-être prolonger la fonction sleep() (le temps d'attente entre deux déclenchements CRON consécutifs du site réseau) en augmentant la durée. Pour ce faire, augmentez la valeur 3 en fonction de la valeur du temps d'attente que vous souhaitez.

  3. Ajoutez une entrée de tâche Cron via le panneau de contrôle de votre hébergement web. Vous pouvez programmer l'exécution de la tâche toutes les 5 ou 10 minutes.
    N'oubliez pas de remplacer yourdomain.com par votre domaine exact :
    wget -q -O - http://yourdomain.com/custom-cron-multisite.php?doing_wp_cron >/dev/null 2>&1
    	

    Chaque serveur a différentes façons d'ajouter une tâche Cron. Si vous n'êtes pas sûr de la façon de procéder, vous pouvez demander à votre fournisseur d'hébergement de vous aider.
    Vous pouvez consulter cette courte vidéo si vous utilisez cPanel: https://recordit.co/A4Jj1Kg7x9

Problème fréquents liés à Cron

Si pour une raison quelconque, les processus planifiés ne fonctionnent pas correctement, vous pouvez remarquer des problèmes avec certaines des fonctionnalités suivantes de WP Rocket :

  • Préchargement du cache
  • Délai de nettoyage du cache
  • Optimisation de la base de données
  • Génération du Critical Path CSS pour le Chargement Asynchrone du CSS
  • Supprimer les ressources CSS inutilisées
  • Add-ons CloudFlare
  • Listes dynamiques d'exclusions et d'inclusions

Le saviez-vous ?
Vous pouvez étendre la fonctionnalité WP Rocket en utilisant Cron pour lancer des fonctions personnalisées. Par exemple: Vider le cache et lancer le préchargement

Cela a-t-il répondu à votre question ? Merci pour votre retour :) Une erreur est survenue lors de l’envoi de votre retour. Veuillez réessayer plus tard.