Automatiser des tâches avec CRONTAB

I. Présentation

Sous Linux, il est possible d’automatiser des tâches c’est-à-dire de planifier l’exécution périodique d’une action. Pour cela, on utilise l’outil « crontab » qui permet de configurer des tâches qui sont exécutées par « cron ». Ainsi, on pourra exécuter une opération tous les jours, toutes les 15 minutes, tous les 10 jours, deux fois par semaine à 20h, etc.

II. Commandes basiques

Commençons par les commandes basiques de CRONTAB ; Afin de lister le contenu de la crontab de l’utilisateur en cours saisissez la commande suivante :

crontab -l

crontab1

Pareillement, pour lister la crontab d’un utilisateur on ajoute l’option « -u ». Exemple avec l’utilisateur « flo ».

crontab -u flo -l

crontab2

Pour supprimer la contrab, on utilise la commande indiquée ci-dessous. Toutefois, attention puisqu’il n’y a pas de demande de confirmation lors de l’exécution de cette commande. Il faut donc l’utiliser avec précaution.

crontab -r

A l’inverse, pour éditer la crontab on utilise cette commande :

crontab -e

Après chaque édition de crontab, il y aura un message « crontab : installing new crontab » où le programme vérifie la syntaxe des lignes saisies et valide la configuration. Si c’est la première fois que vous éditez la crontab sur cette session, on vous demandera de choisir un éditeur pour l’édition. Je vous conseille « nano » qui est le plus simple d’utilisation.

crontab -e

Note : L’éditeur que vous sélectionnez restera mémorisé, pour changer, vous pouvez utiliser à tout moment la commande « select-editor ».

III. Syntaxe d’une tâche

Nous allons voir comment écrire une nouvelle tâche dans la crontab, la syntaxe étant bien précise. Cette dernière étant indiquée dans le fichier crontab :

m h dom mon dow command

crontab3

Ça ne vous parle sûrement pas trop… Voici le détail :

crontab5

Note : « dom » correspond à « Day of month », « mon » à « Month » et « dow » à « Day of week ».

IV. Les valeurs

Chacune des composantes de la syntaxe d’une tâche dans la crontab doit avoir une valeur, mais pas n’importe quelle valeur. Chacune doit être comprise dans une plage de valeurs autorisées, faisons le point.

crontab6

Note : Dans le cas du jour de la semaine, la valeur « 0 » correspond au Dimanche. La valeur « 6 » correspond donc au Samedi.

Je n’ai pas précisé de valeur pour la partie « Commande » de la syntaxe, ce qui est normal puisque la commande c’est vous qui la définissez selon ce que vous souhaitez faire avec cette tâche.

Il est possible d’écrire ces valeurs sous différentes façons :

  •  « * » : Toutes les valeurs c’est-à-dire que si vous mettez ce caractère pour le champ des jours, la tâche sera exécutée tous les jours.
  •  « n » : Un nombre, où n est un nombre compris dans la plage autorisée.
  •  « 2,4,6 » : Différentes valeurs comprises dans la plage autorisée, c’est-à-dire qu’on exécute dès que le champ prend la valeur 2, 4 ou 6.
  •  « 2-6 » : Plages de valeurs comprises dans la plage autorisée, c’est-à-dire qu’on exécute pour toutes les valeurs comprises entre 2 et 6 pour ce champ.
  •  « */2 » : Valeurs multiples de 2, c’est-à-dire qu’on exécute la tâche lorsque le champ a pour valeur 0, 2, 4, 6, etc. Il y aura plus ou moins de valeurs selon le champ concerné. En fait, « 2 » correspond à une valeur d’incrémentation.
  •  « 20-50/2 » : Valeurs multiples de 2 situées entre 20 et 50, c’est-à-dire qu’on exécute la tâche lorsque le champ a pour valeur 20, 22, 24, 26, 28…. 50.

Ci-dessus, vous avez quelques modèles d’écritures possibles pour les valeurs en utilisant des caractères spéciaux comme « / », « * » ou encore « , ». Il existe d’autres caractères spéciaux possibles, nous allons reprendre chacun d’entre eux afin de voir à quoi ils servent.

V. Les caractères spéciaux

Voici le rôle des caractères spéciaux utilisant dans la crontab pour les champs « Minutes », « Heure », « Jour du mois », « Mois », et « Jour de la semaine ».

crontab7

Toutefois, chacun de ces caractères n’est pas utilisable avec tous les champs, voici ce qui est autorisé :
crontab8

VI. Raccourcis

Il y a également des raccourcis qu’on peut utiliser dans la définition d’une tâche crontab. Par exemple, plutôt que d’écrire « 0 * * * * » pour exécuter une tâche toutes les heures, on peut utiliser « @hourly ». Il en existe différents comme « @yearly », « @monthly », « @weekly », etc…

crontab9

VII. Exemples

Maintenant que nous avons vu comment fonctionnait la crontab, je vais vous indiquer quelques exemples afin de vous aider dans la définition de votre tâche, et, vous aider à comprendre plus facilement.

  •  A 20h, le lundi et le vendredi, toute l’année : 0 20 * * 1,5 commande
  •  A 20h, du lundi au vendredi, toute l’année : 0 20 * * 1-5 commande
  •  Toutes les 6 heures, tous les jours, toute l’année : 0 */6 * * * commande
  •  Les 10 premiers jours de chaque mois à 19h30 : 30 19 0-10 * * commande
  •  Tous les 1er du mois à 12h30 : 30 12 1 * * commande
  •  Tous les 1er du mois à 12h30 uniquement de Janvier à Avril : 30 12 1 1-4 * commande
  •  Tous les jours pairs du mois à 23h30 : 30 23 */2 * * commande

VIII. Journaliser les opérations

Chaque tâche renvoie une sortie ou même une erreur dans le cas où ça se passe mal. De ce fait, il est intéressant de récupérer ces informations pour les envoyer dans un fichier de logs (journalisation). On définit le fichier « cron.log » dans le home de l’utilisateur « flo » pour journaliser nos tâches.

  •  Journaliser la sortie : M H DOM MON DOW COMMANDE >> /home/flo/cron.log
  •  Journaliser la sortie et les erreurs : M H DOM MON DOW COMMANDE >> /home/flo/cron.log 2>&1
  •  Journaliser les erreurs : M H DOM MON DOW COMMANDE >> /dev/null 2>>/home/flo/cron.log

Note : Pour utiliser deux fichiers de journalisation, indiquez le chemin complet vers chaque fichier, en remplaçant « &1 » dans le cas des messages d’erreurs.

Par exemple, si j’exécute une tâche qui liste (ls) le contenu du répertoire « /home/flo » à 10h10 tous les jours et que je stocke la sortie dans le fichier « /home/flo/cron.log », une fois la tâche exécutée j’obtiens bien la sortie dans le fichier :
crontab10

Maintenant, je fais une tâche qui liste le contenu du répertoire « /home/flooo » qui n’existe pas ! On obtient bien le message d’erreur dans le fichier de log :

crontab11

Vous êtes désormais en mesure de comprendre l’utilité de crontab, de l’utiliser et de journaliser les tâches que vous mettez en place.

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian BURNEL

Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.

Nombre de posts de cet auteur : 5561.Voir tous les posts

2 thoughts on “Automatiser des tâches avec CRONTAB

  • Excellent tutoriel….

    Je souhaite faire tourner un script dans la nuit de dimanche à lundi de 20h le soir jusqu’à 8h00 le lendemain.

    Que mets tu dans ton crontab ?

    Cdt

    Répondre
  • Merci beaucoup c’est vraiment intéressant.

    Répondre

Laisser un commentaire

Votre adresse e-mail 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.