Table of Contents

LINUX: Exécuter une commande régulièrement avec crontab

La « crontab » constitue un incontournable sous Linux : cet outil nous permet de programmer l'exécution régulière d'un programme.

Contrairement à at qui n'exécutera le programme qu'une seule fois, crontab permet de faire en sorte que l'exécution soit répétée : toutes les heures, toutes les minutes, tous les jours, tous les trois jours, etc. Un peu de configuration…

La « crontab », qu'est-ce que c'est ?

crontab est en fait une commande qui permet de lire et de modifier un fichier appelé la « crontab ». Ce fichier contient la liste des programmes que vous souhaitez exécuter régulièrement, et à quelle heure vous souhaitez qu'ils soient exécutés.

crontab permet donc de changer la liste des programmes régulièrement exécutés. C'est toutefois le programme cron qui se charge d'exécuter ces programmes aux heures demandées.

Ne confondez donc pas crontab et cron : le premier permet de modifier la liste des programmes à exécuter, le second les exécute.

Comment utilise-t-on crontab ?

Il y a trois paramètres différents à connaître, pas plus :

-e : modifier la crontab ;
-l : afficher la crontab actuelle ;
-r : supprimer votre crontab. Attention, la suppression est immédiate et sans confirmation !

Commençons par afficher la crontab actuelle :

$ crontab -l

  no crontab for <nom_user>

Il y a une crontab par utilisateur et root a aussi sa propre crontab :

$ sudo crontab -l
no crontab for root

Pour modifier de la crontab. Taper :

$ crontab -e

Si la crontab est vide, le fichier ne contient qu'une seule ligne :

# m h  dom mon dow   command

Comme cette ligne est précédée d'un #, il s'agit d'un commentaire (qui sera donc ignoré). Cette ligne vous donne quelques indications sur la syntaxe du fichier :

Il faut d'abord indiquer à quel moment la commande doit être exécutée, puis ensuite écrire à la fin la commande à exécuter.

C'est un peu comme un tableau. Chaque champ est séparé par un espace.

Chaque champ numérique peut être remplacé par une étoile qui signifie « tous les nombres sont valables ».

Bien comprendre la crontab n'est pas si simple, pour cela voici quelques exemples pour voir comment ça fonctionne.

Pour exécuter une commande tous les jours à une heure précise

47 15 * * * touch /home/fichier.txt

Seules les deux premières valeurs sont précisées : les minutes et les heures. Chaque fois qu'il est 15 h 47, la commande indiquée à la fin sera exécutée.

Il est préférable d'utilise le chemin du fichier en entier, car on ne peut pas être sûrs que le cron s'exécutera dans le bon répertoire .

Désormais, fichier.txt sera créé dans le répertoire /home tous les jours à 15 h 47 (s'il n'existe pas déjà).

Les différentes notations possibles

Pour chaque champ, on a le droit à différentes notations :

Autres exemples de programmation

Crontab Signification
47 * * * * commande Toutes les heures à 47 minutes exactement. Donc à 00 h 47, 01 h 47, 02 h 47, etc.
0 0 * * 1 commande Tous les lundis à minuit (dans la nuit de dimanche à lundi).
0 4 1 * * commande Tous les premiers du mois à 4 h du matin.
0 4 * 12 * commande Tous les jours du mois de décembre à 4 h du matin.
0 * 4 12 * commande Toutes les heures les 4 décembre.
* * * * * commande Toutes les minutes, il n'est pas possible d'exécuter une commande plus fréquemment que toutes les minutes
30 5 1-15 * * commande À 5 h 30 du matin du 1er au 15 de chaque mois.
0 0 * * 1,3,4 commande À minuit le lundi, le mercredi et le jeudi.
0 */2 * * * commande Toutes les 2 heures (00 h 00, 02 h 00, 04 h 00…)
*/10 * * * 1-5 commande Toutes les 10 minutes du lundi au vendredi.