Aller au contenu principal

Planifier des tâches avec des tâches cron

Les sites web doivent souvent effectuer des opérations à intervalles réguliers : envoyer des infolettres, supprimer d’anciennes données, vérifier les mises à jour ou créer des rapports. Sur les serveurs Linux, on utilise pour cela cron, un planificateur intégré qui exécute une commande aux moments que vous choisissez. Une commande planifiée s’appelle une tâche cron. Ce guide explique comment écrire le calendrier, exécuter un script PHP, tenir un journal et configurer WordPress pour utiliser une vraie tâche cron.

Où ajouter des tâches cron​

En hébergement web, les tâches cron s’ajoutent généralement dans une section de votre panneau de contrôle d’hébergement ou de votre compte consacrée aux tâches planifiées. L’emplacement exact dépend de votre hébergeur. Sur un VPS ou un serveur cloud, ou si votre hébergement comprend un accès SSH, vous pouvez modifier votre liste de tâches cron, appelée crontab, avec :

crontab -e

crontab -l affiche la liste actuelle.

Syntaxe cron : cinq champs horaires​

Chaque tâche cron tient sur une ligne : cinq champs horaires suivis de la commande à exécuter.

┌───────── minute (0–59)
│ ┌─────── heure (0–23)
│ │ ┌───── jour du mois (1–31)
│ │ │ ┌─── mois (1–12)
│ │ │ │ ┌─ jour de la semaine (0–7, où 0 et 7 désignent tous deux le dimanche)
│ │ │ │ │
* * * * * commande à exécuter

Chaque champ accepte :

  • * pour toutes les valeurs
  • un nombre seul, comme 5
  • une liste, comme 1,15
  • une plage, comme 1-5
  • un pas, comme */15 pour une valeur sur 15

Quand le jour du mois et le jour de la semaine sont tous deux définis (aucun n’est *), la tâche s’exécute dès que l’un ou l’autre correspond.

Exemples​

CalendrierSignification
0 3 * * *Tous les jours à 03:00
*/15 * * * *Toutes les 15 minutes
30 6 * * 1-5À 06:30, du lundi au vendredi
0 0 1 * *À minuit le premier jour de chaque mois
0 2 * * 0Tous les dimanches à 02:00

Exécuter un script PHP​

Pour exécuter un script PHP, indiquez le chemin vers PHP et le chemin complet du script. Utilisez des chemins complets, car cron s’exécute avec un environnement minimal et risque sinon de ne pas trouver les programmes ou les fichiers.

0 3 * * * /usr/bin/php /home/exampleuser/scripts/cleanup.php

Le chemin vers PHP varie d’un serveur à l’autre, et certains hébergeurs proposent plusieurs versions de PHP à des chemins différents. Exécutez which php en SSH, ou consultez la documentation de votre hébergeur, pour trouver le bon.

Placez les scripts que seul cron doit exécuter en dehors de la racine de votre site web, pour que les visiteurs ne puissent pas les lancer depuis un navigateur.

Journaliser la sortie​

Par défaut, cron peut tenter d’envoyer la sortie d’une tâche par e-mail au titulaire du compte, ou cette sortie peut tout simplement être perdue. L’écrire dans un fichier journal facilite la recherche des problèmes :

0 3 * * * /usr/bin/php /home/exampleuser/scripts/cleanup.php >> /home/exampleuser/logs/cleanup.log 2>&1

>> ajoute la sortie à la fin du fichier journal, et 2>&1 y inclut aussi les messages d’erreur. Créez d’abord le dossier logs, et surveillez de temps en temps la taille du journal, qui grossit à chaque exécution.

Si vous n’avez besoin d’aucune sortie, envoyez-la plutôt vers /dev/null :

0 3 * * * /usr/bin/php /home/exampleuser/scripts/cleanup.php > /dev/null 2>&1

Remplacer wp-cron de WordPress par une vraie tâche cron​

WordPress possède son propre planificateur, wp-cron. Il ne fonctionne pas avec une minuterie : il vérifie les tâches à exécuter lorsque quelqu’un visite le site. Sur un site peu fréquenté, les articles planifiés et les mises à jour peuvent prendre du retard ; sur un site très fréquenté, les vérifications ont lieu à de nombreux chargements de page et ajoutent du travail inutile.

Une vraie tâche cron règle ces deux problèmes.

  1. Faites une sauvegarde de votre fichier wp-config.php.

  2. Ajoutez cette ligne dans wp-config.php, au-dessus de la ligne qui indique d’arrêter les modifications :

    define( 'DISABLE_WP_CRON', true );
  3. Ajoutez une tâche cron qui appelle wp-cron.php à intervalles réguliers, par exemple toutes les 15 minutes :

    */15 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
  4. Vérifiez dans les heures qui suivent que les tâches planifiées s’exécutent toujours, par exemple en planifiant un article de test.

Si votre hébergeur fournit WP-CLI, l’outil en ligne de commande de WordPress, vous pouvez exécuter wp cron event run --due-now avec l’option --path pointant vers votre dossier WordPress au lieu d’appeler l’adresse.

Fuseaux horaires​

Cron utilise le fuseau horaire du serveur, souvent UTC, qui peut être différent du vôtre et de celui défini dans votre application web. Vérifiez l’heure du serveur avec la commande date en SSH, ou demandez à votre hébergeur, avant de planifier des tâches qui doivent s’exécuter à une heure locale précise.

Garder des tâches légères​

  • N’exécutez pas les tâches plus souvent que nécessaire. Une tâche toutes les minutes s’exécute 1 440 fois par jour. La plupart des tâches de maintenance peuvent tourner toutes les heures ou tous les jours.
  • Étalez les tâches. Évitez de lancer plusieurs tâches lourdes à la même minute, par exemple à minuit.
  • Évitez les chevauchements. Si une tâche peut durer plus longtemps que l’intervalle entre deux exécutions, des copies peuvent s’accumuler et consommer les ressources de votre compte. Allongez l’intervalle, ou utilisez un outil de verrouillage comme flock s’il est disponible.
  • Supprimez les tâches dont vous n’avez plus besoin, par exemple après avoir supprimé une extension.

Les tâches fréquentes ou lourdes sont prises en compte dans les limites de ressources de votre compte d’hébergement, voir Limites de ressources en hébergement mutualisé.

Cet article vous a-t-il aidé ?