La crontab pour les nuls

Exemple d’une ligne de crontab

Admettons que quelqu’un veuille automatiser la mise à jour de son serveur sous Debian. Cette personne modifiera donc la crontab de l’utilisateur root (car les commandes pour faire les mises à jour doivent se faire en tant que root) et y écrira, par exemple, la ligne suivante :

0 16 15 * * apt-get update; apt-get upgrade > /dev/null

Mais que veut dire tout ce charabia ? Hé bien, sa traduction littérale serait « Tous les 15 du mois à 16h, je voudrais que tu exécutes la commande apt-get update puis apt-get upgrade. Jette toute la sortie de ces deux commandes dans le vide.« , tout simplement ! (héhé)

En lisant la traduction littérale que je viens de vous faire, vous avez normalement dû comprendre un peu mieux la ligne de crontab écrite plus haut. Nous allons à présent la décortiquer pour bien comprendre ce qu’elle veut dire :

  • Le premier nombre (0) indique que la tâche doit se faire à 0 minutes (donc à heure pile).
  • Le deuxième nombre (16) indique que la tâche doit se faire à 16h.
  • Le troisième nombre (15) indique que la tâche doit se faire le 15ème jour du mois.
  • La première étoile (*) indique que la tâche doit se faire peu importe le mois. Si on combine le nombre précédent avec cette étoile (ce qui donne « […] 15 * […] »), cela signifie que la tâche doit se faire tous les 15 du mois.
  • La deuxième étoile (*) indique que la tâche doit se faire peu importe le jour de la semaine. Si on combine le dernier nombre et l’étoile précédente (ce qui donne « […] 15 * * […] »), cela signifie que la tâche doit se faire tous les 15 du mois, que ce soit du lundi au dimanche.
  • Les commandes apt-get update et apt-get upgrade sont les commandes que va exécuter CRON lors du traitement de la tâche. Le point virgule (;) entre les deux commandes sert à les séparer pour ne pas que CRON pense que c’est une seule et même commande.
    • J’aimerais que vous différenciez bien le point virgule et la double esperluette (&&) que l’on écrirait habituellement dans un terminal. Les deux font la même chose, c’est-à-dire exécuter plusieurs commandes à la suite, mais à une différence près : la double esperluette regroupe deux commandes en une seule alors que le point virgule sépare les deux commandes. Donc mettre un point virgule reviendrait à taper la première commande, appuyer sur Entrée puis taper la seconde commande. Je tenais à vous préciser cela car différencier la subtilité entre ces deux manières de faire exécuter plusieurs commandes à la suite pourrait vous aider dans l’écriture de certaines tâches bien précises, certaines commandes ne fonctionnant pas si vous les liez avec une double esperluette.
    • Notez que vous pouvez remplacer le point virgule par deux pipes (du genre <commande 1> || <commande 2>) si ça peut vous aider à y voir plus clair.
  • > /dev/null indique que CRON doit jeter tout ce que sort la ou les commandes exécutées dans le vide. En clair, tout ce qui vous serait normalement affiché à l’écran après avoir exécuté apt-get update; apt-get upgrade ne sera stocké nulle part.
    • Nous allons revenir plus en détail sur ce que signifie /dev/null dans un autre chapitre. Sachez pour le moment que vous pouvez y remplacer par l’emplacement d’un fichier pour y stocker toute la sortie dans ce fichier.

Cryonid

Freedom and privacy is what I'm fighting for.

1 réponse

  1. Benoît dit :

    Bonsoir,
    Merci pour cet article très intéressant et complet.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.