Cron : quand, pourquoi et comment ?

MAÏLIS AMALRIC, SITES INTERNET ET
DÉVELOPPEMENT WEB À TOULOUSE

Cron : quand, pourquoi et comment ?

Résumé de l'article

Pour automatiser des tâches cycliques ou gourmandes en ressources, rien de tel qu'un cron bien paramétré !

Informations de publication

1. Contexte / besoin

Commençons par la définition : cron est le diminutif de crontab (pour ChRONo TABle, ou table de planification).
Il s’agit d’une fonctionnalité unix / linux qui permet d’exécuter une même tâche (ou plusieurs) en arrière-plan, à intervalle régulier et prédéfini.

Plusieurs cas peuvent justifier la mise en place d’un cron :

  • S’il s’agit d’un traitement lourd pouvant influer sur le bon fonctionnement du site, le planifier à un moment de moindre fréquentation limite son impact sur l’expérience utilisateur.
  • Si c’est un besoin de récurrence, par exemple une mise à jour toutes les heures d’un stock partagé entre une boutique en ligne et un (ou plusieurs) magasins.
  • Si le traitement doit être fait à un horaire précis, l’automatisation par cron évite les oublis.
  • Parfois, il peut s’agir de répondre à une obligation légale, comme par exemple sur un jeu avec une chance par jour et par personne, et une tâche planifiée permettra de remettre les compteurs à zéro quotidiennement.

2. Solution proposée

NB : Les schémas et explications ci-dessous sont basées sur le cPanel de l’hébergeur français o2switch (et non je ne suis pas rémunérée pour faire cet article 🙂 ).

Dans l’ordre d’affichage de la page dédiée aux tâches cron dans le cPanel, il y a d’abord l’e-mail de notification des tâches.
Par défaut il s’agit de l’adresse mail à laquelle est rattaché le compte client, mais il est possible de la changer, par exemple pour que ce soit l’équipe technique qui reçoive les notifications et non l’équipe commerciale.
Attention, le simple fait de mentionner une adresse mail n’enverra pas pour autant un compte rendu de l’exécution de la tâche mais enverra un mail avec le résultat affiché de celle-ci (commande PHP echo).

Deuxième étape : définition de la tâche et de son exécution

La fréquence d’exécution peut être définie grâce aux paramètres communs proposés par défaut ou de manière personnalisée en utilisant les cases Minute, Heure, Jour (numéro du jour dans le mois), Mois et Jour (position du jour dans la semaine).

Les valeurs possibles sont les suivantes :

  • * : à chaque unité (minute, heure, jour, mois…)
  • 1, 4 : pour les unités 1 et 4 (par exemple pour le 1er et le 4ème jour du mois)
  • 1-4 : pour les unités de 1 à 4 (par exemple pour les 1er, 2nd, 3ème et 4ème jours du mois)
  • */4 : toutes les 4 unités (par exemple aux heures 0, 4, 8….)
  • 4-16/4 : toutes les 4 unités, entre la 4ème et la 16ème (4, 8, 12, 16)

Avec tous ces paramètres, l’exécution peut être planifiée d’une tâche de manière très précise.
Voici quelques exemples pour illustrer les différentes possibilités de planification :

  • 5 1 * * 0 : à 1h05 tous les dimanches (0 étant le code du dimanche).
  • 5 0 * * * : tous les jours à 0h05
  • 0 7 * * 1-5 : du lundi au vendredi, à 7h00
  • */5 * * * * : toutes les 5 minutes

La dernière ligne, « Commande« , doit contenir au minimum les éléments suivants :

  • L’arborescence du serveur pour accéder à la bonne version de PHP, par exemple /opt/alt/php72/usr/bin/php
  • Et les indications pour que le cron trouve le fichier à exécuter, à priori ressemblant à /dossier_principal/sous_dossier/adresse-du-fichier-a-executer.php

Il est aussi possible d’appeler un fichier avec son URL sur le site, par exemple http://site-d-exemple.fr/tache-planifiee.php, et même s’y ajouter des paramètres accessibles en GET comme lors d’une navigation basique. L’écriture est alors un peu différente et ressemble à la ligne ci-dessous, l’instruction -o /dev/null/ permettant de ne pas générer un fichier à chaque exécution de la tâche (et que l’on peut remplacer par -q pour autoriser la génération automatique du fichier de rapport d’exécution).
wget -o /dev/null « http://site-d-exemple.fr/tache-planifiee.php?param1=truc&param2=muche »

Et pour finir, quelques astuces pour mettre en place un cron sereinement :

  • Commencer par tester le script en dehors de la planification par cron, en appelant tout simplement l’URL du fichier après y avoir inséré des commandes echo claires pour corriger les éventuels bugs.
    Et si le script impacte certaines données, utiliser une version « commentée », par exemple écrire « mise à jour du stock » au lieu de faire la mise à jour, ou faire des versions de la base de données pour pouvoir les comparer et revenir en arrière si besoin.
  • Une fois le script fin prêt, si vous avez des doutes sur votre écriture du cron et notamment l’accès au fichier avec l’arborescence, vous pouvez commencer par le faire exécuter fréquemment même si à terme il ne sera appelé qu’une fois par jour ou moins souvent.
  • A partir du moment où le cron est lancé, pour ne plus recevoir de notifications par mail il suffit de désactiver les commandes echo ou d’ajouter > /dev/null à la fin de la ligne de commmande
Partager la publication