Aller au contenu

Taches cron et traitement en arriere-plan

PrimoCRM effectue toutes ses tâches lourdes en arrière-plan : l’envoi des campagnes, les séquences de diffusion et les étapes d’automatisation sont traités par des processus planifiés, jamais lors du chargement d’une page. Ces processus s’exécutent via le cron WordPress, ce qui signifie qu’un cron fiable est essentiel pour garantir l’envoi de vos e-mails en temps voulu. Cette page explique son fonctionnement et la manière de le fiabiliser.

PrimoCRM enregistre deux planifications personnalisées et un petit ensemble de processus en arrière-plan :

Processus Exécution Tâche
Envoi des e-mails de campagne À la demande (uniquement lorsqu’une campagne contient des e-mails en attente) Envoie une campagne par lots régulés
Traitement des séquences Chaque minute Envoie les e-mails de séquence dus
Traitement des automatisations Chaque minute Fait avancer les contacts dans les étapes d’automatisation
Vérification de la santé de la file d’attente Toutes les 5 minutes Récupère les e-mails bloqués et relance les campagnes en pause

Chaque processus prend en charge un lot de travail, respecte un budget de temps pour ne jamais dépasser les limites de votre hébergeur, puis se replanifie. La vérification de santé de 5 minutes constitue un filet de sécurité : si un envoi se bloque, elle le relance dès le cycle suivant.

WordPress intègre un pseudo-cron qui ne se déclenche que lorsque quelqu’un visite le site. Sur un site très fréquenté, cela pose rarement problème. Sur un site à faible trafic, des heures peuvent s’écouler sans aucune visite, ce qui retarde les envois planifiés jusqu’à l’arrivée d’un prochain visiteur. Le symptôme visible est une campagne bloquée sur “envoi en cours” qui stagne ou n’envoie rien.

La solution consiste à remplacer le pseudo-cron déclenché par les visiteurs par un vrai cron qui s’exécute à un rythme fixe, idéalement chaque minute.

  • Ouvrez PrimoCRM, allez dans Réglages, puis recherchez l’état du système ou du cron, qui indique si les processus sont planifiés et à quel moment ils ont été exécutés pour la dernière fois.
  • Ou installez un plugin d’aide tel que WP Crontrol et vérifiez que les événements primocrm_process_sequences, primocrm_process_automations et primocrm_queue_health_check sont bien présents et s’exécutent.

Si une campagne est bloquée et que votre site reçoit peu de trafic, le cron en est presque toujours la cause.

Deux étapes : désactiver le pseudo-cron de WordPress, puis ajouter un vrai cron qui s’exécute chaque minute.

Ajoutez cette ligne dans le fichier wp-config.php, juste au-dessus de la ligne “C’est tout, arrêtez d’éditer !” :

define( 'DISABLE_WP_CRON', true );

Cela empêche WordPress de déclencher le cron lors du chargement des pages, faisant ainsi de votre vrai cron l’unique déclencheur.

Choisissez la méthode qui correspond à votre hébergement.

WP-CLI (idéal si vous avez un accès SSH) :

* * * * * cd /path/to/wordpress && wp cron event run --due-now >/dev/null 2>&1

Binaire PHP (également très bien avec un accès SSH) :

* * * * * php /path/to/wordpress/wp-cron.php >/dev/null 2>&1

cPanel : ouvrez Tâches Cron, définissez la planification sur chaque minute (* * * * *), et utilisez l’une des commandes ci-dessus avec le chemin d’accès complet vers votre site.

Aucun accès SSH (hébergement mutualisé) ? Utilisez un service de cron distant gratuit tel que cron-job.org pour appeler l’URL de votre cron via HTTP chaque minute :

https://yoursite.com/wp-cron.php?doing_wp_cron

Inscrivez-vous sur le service, ajoutez cette URL, définissez l’intervalle sur 1 minute et enregistrez. Cela permet d’exécuter le cron WordPress de l’extérieur à un rythme fixe.

  • Une campagne est bloquée sur “envoi en cours”. C’est presque toujours lié au cron. Vérifiez qu’un vrai cron s’exécute chaque minute et que la constante DISABLE_WP_CRON est bien définie. La vérification de santé de 5 minutes reprendra l’envoi dès que le cron s’exécutera.
  • Les automatisations ou les séquences s’exécutent en retard. Votre intervalle de cron est trop long ou le pseudo-cron attend des visiteurs. Passez à un vrai cron configuré à la minute.
  • Rien ne s’envoie du tout. Indépendamment du cron, vérifiez que votre méthode d’envoi est configurée et qu’un e-mail de test arrive bien à destination. Le cron contrôle le moment de l’exécution, tandis que le service de messagerie contrôle l’effectivité de la livraison.
  • Limites de processeur de l’hébergement mutualisé. Les processus disposent d’un budget de temps et se mettent en pause en cas de forte charge, ce qui les rend sûrs pour les hébergements mutualisés. Si votre hébergeur se plaint tout de même, un intervalle légèrement plus long (2 à 5 minutes) réduira la fréquence au détriment de la réactivité.

Consultez également la section Prérequis pour les exigences PHP et serveur, ainsi que Envoi et délivrabilité pour ce qui concerne le service de messagerie.