Partager cet article

Comme plus de 28 000 freelances, recevez des offres de mission tech à la messure de votre talent sur FreelanceRepublik.

Derniers articles

Les tâches cron : comment ça marche ? Comment les planifier ?

Les tâches cron, vous connaissez ? Ce sont ces petits scripts, exécutés sur un système unix, qui permettent d’automatiser certains programmes ou actions.

Vous souhaitez en savoir plus sur cette fonctionnalité ? Apprendre à créer des cron jobs ? On vous explique tout dans cet article !

Cron, qu’est-ce que c’est ?

Cron, la définition

En une phrase, une cron job est une tâche exécutée automatiquement dans le système d’exploitation.

C’est évidemment une définition très simplifiée, aussi rentrons un peu plus dans les détails !

Le mot cron vient de crontab, lui-même venant de chrono table, soit table de planification. En clair, cron permet de planifier une liste (table) de tâches qui seront exécutées à des moments spécifiques, définis en amont. Comme nous le verrons, cron permet d’exécuter de nombreuses actions différentes ; ses cas d’utilisation sont donc nombreux.

Cron est exécutable via la commande crontab, présente dans les systèmes d’exploitation unix. Par exemple, on la trouvera sur :

  • Mac Os à /usr/lib/cron/tabs/<utilisateur> ;
  • Pour Fedora : /var/spool/cron/<utilisateur> ;
  • Et Ubuntu : /var/spool/cron/crontabs/<utilisateur>.

Les commandes cron

Nous venons de le dire, c’est via la commande crontab que nous organisons les tâches cron qui seront exécutées. Voici les commandes principales de ce crontab, à entrer dans le terminal d’un système unix :

Pour afficher le contenu de la table cron de l’utilisateur courant :

crontab -l

La commande pour modifier la table cron de l’utilisateur courant :

crontab -e

Pour supprimer tout le contenu de la table cron de l’utilisateur courant :

crontab -r

Si vous voulez en savoir plus sur les options de la commande cron, voici de la documentation !

Créer des tâches cron

Écran d'ordinateur avec des tâches automatiques écrites en code

La gestion de la table cron

Lorsqu’on exécute la commande crontab -e, nous avons donc accès à un éditeur pour y ajouter les tâches cron. C’est dans ce fichier que nous allons écrire les commandes qui seront exécutées automatiquement, ainsi que les règles qui fixent les dates et périodes d’exécution.

Ce fichier s’ouvre par défaut dans l’éditeur de texte du terminal (vi), il n’est donc pas simple d’y écrire les règles. Une meilleure solution serait d’écrire toutes ces règles (dont nous allons voir la syntaxe) dans un fichier texte, et d’écraser la table courante grâce à ce fichier, via la commande suivante :

crontab {nom-du-fichier}.txt

La syntaxe cron

Nous allons entrer maintenant dans le vif du sujet et voir comment créer une tâche cron !

Il y a, comme pour tout programme informatique, une syntaxe bien spécifique à utiliser pour créer un cron job.

Chaque ligne, chaque entrée du fichier, correspond à une tâche à effectuer. La tâche étant lancée à des moments spécifiques, elle doit respecter cette syntaxe, propre à cron :

mm hh jj MMM JJJ *task*

Chaque attribut avant le nom de la tâche correspond à un élément particulier devant contenir des valeurs spécifiques :

  • mm sont les minutes (de 0 à 59) ;
  • hh, les heures (de 0 à 23) ;
  • jj représente le jour du mois (de 1 à 31) ;
  • MMM peut être soit l’abréviation du mois (jan, feb, mar, etc.) soit le numéro de ce mois (de 1 à 12) ;
  • Enfin, JJJ est utilisé pour désigner le jour d’exécution du cron job (là aussi, l’abréviation, ou le numéro du jour de la semaine, commençant au dimanche avec le chiffre 0).

Pour chacune des valeurs numériques renseignées, il y a également plusieurs notations possibles, à savoir :

  • * : signifiant chaque unité possible de la variable ;
  • 1,3 : les unités 1 et 3 ;
  • 1-3 : les unités de 1 à 3 ;
  • */2 : toutes les 2 unités (tous les paires, dans cette exemple) ;
  • 10-20/2 : toutes les 2 unités, entre la dixième et la vingtaine.

Concernant la tâche, il s’agit d’une commande à exécuter. Elle peut s’écrire directement dans la ligne de la table, mais on exécute en général un fichier externe, un bash par exemple (ou un fichier php), qui va, lui, suivre un ensemble d’instructions.

Il est possible de demander au cron job d’écrire dans un fichier les logs de retour des commandes exécutées, en utilisant la syntaxe suivante :

30 23 * * * df >> /tmp/df.log

Dans cet exemple, la tâche cron exécutera la commande unix df (qui retourne l’espace disque libre) et écrira son résultat dans le fichier /tmp/df.log, et ce tous les jours à 23h30.

Les raccourcis syntaxiques cron

Comme vous pouvez le voir, la syntaxe cron est claire, mais elle n’est pas pour autant facile à maitriser. Heureusement, il y a des raccourcis syntaxiques pour éviter d’avoir à réfléchir pour setter une tâche simple. Par exemple, pour un profane, écrire la ligne cron correspondant à « tous les ans » ne vient pas naturellement.

Il suffit de remplacer les données de date par un des éléments suivants :

RaccourcisDescriptionÉquivalent
@rebootAu démarrageAucun
@yearlyTous les ans0 0 1 1 *
@annuallyTous les ans0 0 1 1 *
@monthlyTous les mois0 0 1 * *
@weeklyToutes les semaines0 0 * * 0
@dailyTous les jours0 0 * * *
@midnightToutes les nuits0 0 * * *
@hourlyToutes les heures0 * * * *

Par exemple, pour exécuter un ‘echo’ toutes les nuits, nous pourrions utiliser la commande suivante :

@midnight echo "C'est la nuit !"

Quelques exemples de tâches cron

Maintenant que nous avons vu la partie théorique, passons un peu à la pratique, en parlant de cas concrets qui peuvent nous pousser à utiliser des tâches cron. Voyons ces cas, et comment ces jobs sont constitués.

Les utilisations possibles

Les utilisations possibles d’une tâche cron sont nombreuses. Parmi les plus courantes, on retrouve par exemple :

  • L’envoi de newsletter ;
  • La sauvegarde de données ;
  • Le nettoyage de dossiers temporaires ;
  • la création de statistiques (récupération régulière de visites d’un site, de ventes, etc.).

Exemples par le code

Il existe d’innombrables exemples de tâches cron sur le net ! Aussi, si vous cherchez à faire quelque chose en particulier via ces évènements programmés, il est fort possible que quelqu’un ait déjà voulu le faire, et que la solution soit sur le net.

Nous allons vous donner ici quelques-uns de ces exemples. Cela vous permettra aussi d’avoir des bases concrètes pour écrire vous-mêmes vos propres scripts cron !

Nous avons déjà vu un exemple simple un peu plus haut dans cet article, abordons maintenant des cas un peu plus spécifiques.

Exécuter une tâche toutes les cinq minutes

Pour exécuter le même cron job à intervalle régulier, il faut utiliser la syntaxe que nous avons définie de la manière suivante :

*/5 * * * * mon-script.sh

Le script bash mon-script.sh sera exécuté toutes les cinq minutes.

Nettoyer le cache mémoire régulièrement

En créant un script bash et en y associant une commande cron, on peut programmer le nettoyage du cache mémoire.

Le script (exemple) :

#!/bin/sh
sudo sh -c "sync; echo 3 > /proc/sys/vm/drop_caches"

La ligne cron :

@daily  /usr/local/bin/clear_mem.sh

Créer des cron jobs via l’UI d’un hébergeur

Vu les cas d’utilisation des tâches cron (sauvegarde de données, envoi d’emails, etc.), on se doute que leur utilisation principale se fait non pas en local, mais plutôt sur des sites ou applications web.

L’exemple typique serait sur un site e-commerce, de la sauvegarde régulière des stocks des produits.

Pour cela, plutôt que de se connecter au serveur en SSH et faire toutes les manipulations listées plus haut, les hébergeurs web tels qu’OVH ou Gandi nous permettent de facilement créer des tâches cron.

Ils mettent en effet à disposition dans leur interface d’administration des options permettant de setter des cron jobs. Concrètement, vous avez un script sur votre serveur (un bash, un fichier PHP, une route Node, etc.), et définissez, via une interface graphique, la période d’appel à ce fichier.

Prenons l’exemple d’OVH, qui l’explique très bien via la documentation officielle.

Écran de configuration OVH pour la configuration de tâches cron

Comme nous le voyons sur la capture d’écran précédente, il est facile de définir un intervalle de temps pour appeler votre tâche à exécuter.

Il y a évidemment quelques limites, notamment pour éviter la surcharge serveur, par exemple avec OVH :

  • Une tâche ne peut pas être appelée plus d’une fois par heure ;
  • Son exécution ne peut pas durer plus de 60 minutes ;
  • Un cron job ne peut pas générer plus de 5 Mo de data ;
  • Les rapports d’exécution envoyés par email ne le seront qu’une fois par jour.

Mais la possibilité de définir ces jobs via une interface graphique est beaucoup plus pratique et sûre, surtout lorsqu’on n’a pas l’habitude de manipuler des fichiers sur un serveur distant via un terminal.

Conclusion

Pour résumer, les tâches cron sont donc des scripts exécutés à intervalles réguliers. Peu connus, ils sont pourtant essentiels au bon fonctionnement des web apps (sans eux, pas d’envoi d’emails automatiques, par exemple), et relativement facile à paramétrer, lorsque nous en connaissons les commandes.

Et vous, utilisez-vous déjà ces cron jobs ? Quelles en sont vos utilisations ? Dites-le nous en commentaire !

Ces articles peuvent vous intéresser

Ne perdez plus de temps à prospecter en vain. Inscrivez-vous gratuitement sur FreelanceRepublik, et recevez de belles offres de missions tech. FreelanceRepublik est gratuit pour les freelances.