Outre le planificateur paresseux et le planificateur Web Cron décrits dans Comment choisir un planificateur, Joomla peut exécuter ses tâches planifiées en ligne de commande. Une tâche cron sur le serveur exécute l'application console de Joomla, cli/joomla.php, avec la commande scheduler:run. Aucun navigateur, visiteur ou requête web n'est impliqué.

Pour les tâches gourmandes en temps, c'est le meilleur choix lorsque votre hébergement permet d'ajouter des tâches cron qui exécutent une commande, et pas seulement des tâches cron qui appellent une URL :

  • Aucune limite de temps web. Une tâche s'exécute aussi longtemps que nécessaire. Sur le web, le serveur web ou l'hébergement peuvent arrêter une requête après une minute ou deux, ce qui interrompt les tâches longues.
  • Timing précis, comme Web Cron, avec une précision à la minute près lorsque la tâche cron s'exécute chaque minute.
  • Aucun lien à garder secret. Rien n'a besoin d'être accessible depuis l'extérieur du serveur.

Il n'y a rien à activer dans les paramètres des tâches planifiées : la commande est toujours disponible.

C'est un peu plus de travail à mettre en place, ce qui va plus ou moins à l'encontre de l'objectif du planificateur de tâches de Joomla : rendre les tâches planifiées facilement gérables au sein de l'administration. Gardez cela sous la main comme astuce pour exécuter des tâches gourmandes en temps.

Configurer la tâche cron

  1. Dans le panneau de contrôle de votre hébergement, ajoutez une tâche cron de type commande, à exécuter chaque minute.
  2. Utilisez cette commande, avec le chemin vers PHP et vers votre site sur votre serveur :
    /usr/bin/php /home/example/public_html/cli/joomla.php scheduler:run --all
    • Votre hébergeur vous indique le chemin vers PHP. Cela doit être une version de PHP prise en charge par votre version de Joomla (PHP 8.3 ou ultérieur pour Joomla 6).
    • --all exécute toutes les tâches dues. Sans cette option, chaque exécution ne démarre que la prochaine tâche due, de sorte que les tâches s'attendent les unes les autres.
  3. Ajoutez > /dev/null 2>&1 à la fin si vous ne souhaitez pas que le service cron vous envoie par e-mail la sortie de chaque exécution.
  4. Dans Système > Tâches planifiées > Paramètres, désactivez le planificateur paresseux et Web Cron, afin qu'un seul planificateur démarre vos tâches.

Vérifier que cela fonctionne

Exécutez la commande vous-même une fois, si votre hébergement propose un terminal (SSH) :

php cli/joomla.php scheduler:run --all

Joomla liste chaque tâche qu'il a exécutée et termine par Finished running N tasks. Dans Système > Tâches planifiées, la colonne Dernière date d'exécution indique quand chaque tâche a été exécutée pour la dernière fois.

Commandes utiles

Commande Ce qu'elle fait
php cli/joomla.php scheduler:list Liste les tâches avec leur Id, leur état et leur prochaine exécution.
php cli/joomla.php scheduler:run --id=5 Exécute immédiatement la tâche activée avec l'Id 5, qu'elle soit due ou non.
php cli/joomla.php scheduler:run --all Exécute toutes les tâches dues.
php cli/joomla.php scheduler:state Active, désactive ou met une tâche à la corbeille.

Toutes les commandes Joomla sont décrites dans Utiliser l'interface en ligne de commande (CLI).

Bon à savoir

En ligne de commande, Joomla exécute une tâche due même pendant qu'une autre tâche est encore en cours d'exécution. Il peut même démarrer une tâche qui est encore en cours d'exécution dans un processus antérieur : scheduler:run ne vérifie pas si une tâche est verrouillée. Lorsqu'une tâche prend plus de temps que l'intervalle de votre tâche cron, assurez-vous que deux exécutions simultanées ne causent aucun dommage, ou exécutez cette tâche moins fréquemment. Web Cron et le planificateur paresseux ne démarrent aucune tâche pendant qu'une autre tâche est en cours d'exécution.