Cron dans PrestaShop : des tâches planifiées bien faites
Abonnements, flux Google, synchronisation avec l'ERP : beaucoup de choses dépendent d'un cron. Nous vous montrons comment les configurer pour qu'ils n'échouent pas en silence.
De nombreuses fonctions d'une boutique ne sont pas déclenchées par un client, mais par l'horloge : encaisser les renouvellements d'abonnements, régénérer le flux Google Shopping, synchroniser le stock avec l'ERP, nettoyer les paniers. C'est le rôle des tâches cron.
Deux façons de les lancer
Par URL
*/15 * * * * curl -s "https://tienda.com/module/mimodulo/cron?token=XXXX" > /dev/null
Simple et compatible avec n'importe quel hébergement, mais la tâche est soumise aux limites du serveur web (temps d'exécution, cache de page, pare-feu).
En ligne de commande
*/15 * * * * cd /var/www/tienda && php modules/mimodulo/cron.php >> var/logs/cron-mimodulo.log 2>&1
Sans les limites du serveur web et avec son propre journal. C'est l'option à privilégier quand on dispose d'un accès SSH.
Sécurité
- Toute URL de cron doit comporter un jeton long et aléatoire, vérifié avant toute action.
- Ne mettez jamais le jeton dans un lien public ni dans le robots.txt.
- Si la tâche encaisse des paiements ou envoie des e-mails, elle doit être idempotente : l'exécuter deux fois ne doit pas encaisser deux fois.
Qu'ils n'échouent pas en silence
- Tenez un journal avec la date, ce qui a été fait et la durée.
- Enregistrez la date de la dernière exécution réussie et affichez-la dans le back-office du module.
- Alertez (e-mail, Telegram, Slack) si une tâche critique ne s'est pas exécutée depuis trop longtemps.
Des fréquences raisonnables
| Tâche | Fréquence |
|---|---|
| Renouvellements d'abonnements | Une ou plusieurs fois par jour |
| Synchronisation du stock | Toutes les 5 à 15 minutes |
| Flux de produits | Une fois par jour |
| Nettoyage des données | Une fois par semaine ou par mois |