Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 51

Planification de tâches avec Cron

Recommended resources

Bonjour !

Dans la leçon précédente, nous avons construit un script de sauvegarde robuste et fonctionnel. Vous avez appris à utiliser des variables, à horodater vos archives et à vérifier si la commande tar s'est exécutée avec succès. Cependant, notre script nécessite encore une action manuelle pour être lancé.

Aujourd'hui, nous allons franchir la dernière étape pour transformer ce script en un véritable automatisme. L'objectif de cette leçon est de vous apprendre à planifier l'exécution automatique de scripts avec cron. cron est l'outil standard sur tous les systèmes Linux pour automatiser des tâches, qu'il s'agisse de sauvegardes nocturnes, de mises à jour hebdomadaires ou de rapports mensuels. Maîtriser cron est une compétence non négociable pour tout administrateur systèmes.

1. Qu'est-ce que cron ?

Au cœur de Linux, de nombreux services fonctionnent en arrière-plan pour maintenir le système en état de marche. cron est l'un de ces services, souvent appelé un démon (daemon). Son unique travail est de se réveiller chaque minute, de consulter un fichier de configuration appelé crontab (table de cron), et d'exécuter les tâches qui y sont programmées pour cette minute précise.

Pour une introduction rapide et claire, regardons cette vidéo.

Linux® : Planifier des tâches

Cette courte vidéo de la chaîne "Informatique Sans Complexe !" explique très bien le concept du démon cron et introduit le principe de la crontab.

Regardez le début de la vidéo, de 00:00 à 01:36. Concentrez-vous sur la définition de cron comme un service en tâche de fond et sur le rôle du fichier crontab comme une table de planification.

Chaque utilisateur du système peut avoir sa propre crontab pour planifier ses propres tâches. Il existe également une crontab système (/etc/crontab) gérée par l'administrateur pour les tâches qui concernent l'ensemble de la machine, mais pour l'instant, nous nous concentrerons sur votre crontab personnelle.


2. La syntaxe crontab : le langage de la planification

Pour dire à cron quand exécuter une commande, nous devons écrire une ligne dans notre fichier crontab en respectant une syntaxe très précise. Chaque ligne représente une tâche planifiée et est composée de six champs.

Crontab Entry Structure Explanation
Cette image illustre la structure d'une ligne de `crontab`. Les cinq premiers champs définissent le "QUAND" (minute, heure, jour du mois, mois, jour de la semaine), et le dernier champ définit le "QUOI" (la commande à exécuter).

La structure est donc : minute heure jour-du-mois mois jour-de-la-semaine commande.

Pour bien comprendre cette syntaxe et les caractères spéciaux qui la rendent si puissante, je vous propose de lire la section dédiée dans le guide suivant.

Cron et Crontab : planification de tâches sur Linux

Ce guide de Stéphane Robert détaille de manière très claire la syntaxe crontab, y compris les caractères spéciaux et les abréviations utiles.

Lisez la section intitulée "Syntaxe de Crontab". Portez une attention particulière à la signification de chaque champ et au rôle des caractères spéciaux : l'astérisque (*), la virgule (,), le tiret (-) et la barre oblique (/). Notez aussi les abréviations pratiques comme @daily.

En résumé :

  • * signifie "chaque". Par exemple, * dans le champ des heures signifie "chaque heure".
  • */5 dans le champ des minutes signifie "toutes les 5 minutes".
  • 1-5 dans le champ du jour de la semaine signifie "du lundi au vendredi".
  • 0 4 * * 1 signifie "tous les lundis à 4h00 du matin".

3. Gérer votre crontab

Maintenant que vous connaissez la syntaxe, voyons comment créer et gérer votre crontab personnelle. Cela se fait principalement avec la commande crontab et quelques options.

  • crontab -e : Pour éditer (modifier) votre crontab. C'est la commande que vous utiliserez le plus.
  • crontab -l : Pour lister (afficher) le contenu de votre crontab actuelle.
  • crontab -r : Pour remove (supprimer) complètement votre crontab. Attention, cette commande est dangereuse car elle ne demande pas de confirmation !

La première fois que vous lancerez crontab -e, le système vous demandera de choisir un éditeur de texte.

Crontab Editor Selection in Linux Terminal
Comme le montre cette image, vous aurez le choix entre plusieurs éditeurs. Choisissez `nano` en tapant `1` puis `Entrée`, car c'est l'éditeur le plus simple que nous utilisons depuis le début de ce cours.

Après avoir fait votre choix, un fichier s'ouvrira dans nano, prêt à être modifié. Vous pourrez y ajouter vos lignes de planification, puis sauvegarder (Ctrl+O) et quitter (Ctrl+X). cron détectera automatiquement les changements.


4. Exercice : Automatisez votre script de sauvegarde

Il est temps de mettre tout cela en pratique et d'automatiser le script mon_backup.sh que vous avez créé dans la leçon précédente.

Objectif : Planifier l'exécution du script de sauvegarde toutes les minutes (à des fins de test) et vérifier que tout fonctionne correctement.

  1. Ouvrez votre crontab pour l'éditer :

    crontab -e
    

    (Choisissez nano si c'est la première fois).

  2. Ajoutez la ligne de planification :
    À la fin du fichier, ajoutez la ligne suivante. Adaptez le chemin /home/votre_user/ à votre nom d'utilisateur.

    * * * * * /bin/bash /home/votre_user/mon_backup.sh > /home/votre_user/backup.log 2>&1
    

    Analyse de cette ligne :

    • * * * * * : "chaque minute de chaque heure de chaque jour..." C'est notre planification pour tester rapidement.
    • /bin/bash /home/votre_user/mon_backup.sh : C'est la commande. Il est crucial d'utiliser les chemins complets (absolus) car cron ne dispose pas du même environnement que votre terminal. Il ne sait pas "où" se trouve votre script par défaut.
    • > /home/votre_user/backup.log 2>&1 : C'est une bonne pratique essentielle.
      • > redirige la sortie standard (les messages de succès) vers le fichier backup.log.
      • 2>&1 redirige la sortie d'erreur (la "2") vers la même destination que la sortie standard (la "1").
      • En bref : tout ce que le script affichera, succès comme erreur, sera écrit dans le fichier backup.log au lieu d'être envoyé par email.
  3. Sauvegardez et quittez nano. Vous devriez voir un message comme crontab: installing new crontab.

  4. Vérifiez l'exécution :

    • Attendez une ou deux minutes.
    • Listez les fichiers dans votre dossier de sauvegardes :
      ls -l ~/sauvegardes
      
      Vous devriez voir de nouvelles archives .tar.gz apparaître chaque minute.
    • Consultez le fichier journal :
      cat ~/backup.log
      
      Vous devriez y voir le message de succès que vous avez programmé dans votre script.
  5. Challenge : Modifier la planification
    Maintenant, éditez à nouveau votre crontab (crontab -e) et modifiez la ligne pour que le script s'exécute tous les jours à 2h30 du matin.

    Cliquez ici pour voir la solution

    30 2 * * * /bin/bash /home/votre_user/mon_backup.sh > /home/votre_user/backup.log 2>&1
    

  6. Nettoyage :
    Une fois que vous avez bien compris le mécanisme, supprimez votre crontab pour ne pas encombrer votre système avec des sauvegardes chaque minute.

    crontab -r
    

    Vérifiez qu'elle a bien été supprimée avec crontab -l (la commande devrait afficher no crontab for votre_user).


Conclusion

Félicitations ! Vous avez maintenant le pouvoir d'automatiser n'importe quelle commande ou script sur un système Linux. Vous avez transformé un script manuel en un processus de sauvegarde entièrement automatique, une compétence fondamentale en administration système.

Points clés à retenir :

  • cron est le service qui exécute les tâches, crontab est le fichier qui les planifie.
  • La syntaxe crontab est composée de 5 champs pour l'heure/date et un champ pour la commande.
  • Les commandes de base sont crontab -e (éditer), crontab -l (lister) et crontab -r (supprimer).
  • Les bonnes pratiques sont cruciales : toujours utiliser des chemins absolus pour les commandes et les scripts, et rediriger la sortie vers un fichier de log pour garder une trace.

Notre voyage dans l'automatisation avec Bash est maintenant terminé. Vous savez écrire des scripts, utiliser des conditions et des boucles, et planifier leur exécution. Mais que se passe-t-il quand un script automatisé échoue ? Comment savoir ce qui n'a pas fonctionné ?

Dans notre prochain module, nous aborderons les méthodologies de dépannage. Vous apprendrez à analyser les journaux système (comme backup.log ou les logs de cron eux-mêmes) pour diagnostiquer et résoudre les problèmes, une compétence tout aussi vitale que l'automatisation.