16.3. crontab : exécuter des commandes périodiques

crontab est une commande qui vous permet d'exécuter des commandes à des intervalles de temps réguliers, avec l'avantage supplémentaire que vous n'avez pas à être connecté(e) au système et que la sortie de ces commandes vous est envoyée par courrier électronique. Vous pouvez spécifier les intervalles en minutes, en heures, en jours et même en mois. crontab agira différemment en fonction des options :

  1. -l : Affiche votre fichier crontab courant.

  2. -e : Édite votre fichier crontab.

  3. -r : Élimine votre fichier crontab courant.

  4. -u <utilisateur> : Applique les options ci-dessus à l'utilisateur <utilisateur>. Seul root est autorisé à faire cela.

Commençons par éditer un fichier crontab. En tapant crontab -e, vous vous retrouverez en face de votre éditeur de texte préféré si vous avez initialisé la variable d'environnement EDITOR ou VISUAL, autrement c'est VI qui sera utilisé. Une ligne dans un fichier crontab est composée de six champs. Les cinq premiers sont les intervalles de temps en minutes, heures, jours dans le mois, mois et jours dans la semaine. Le sixième champ est la commande à exécuter. Les lignes commençant par un # sont considérées comme des commentaires et seront ignorées par crond (le programme en charge d'exécution des fichiers crontab). Voici un exemple de fichier crontab :

Note

afin de pouvoir imprimer l'extrait qui suit dans une police de caractères lisible, il nous a fallu ventiler les lignes les plus longues. C'est pourquoi certaines portions du texte doivent en réalité n'occuper qu'une seule ligne. Quand vous verrez le caractère \ terminer une ligne, cela signifiera qu'il faut considérer que la ligne se poursuit au-delà. Cette convention fonctionne dans les fichiers de type Makefile et dans le shell, ainsi que dans d'autres cadres.

# Si vous ne voulez pas recevoir de courrier,
#   "décommentez"  la ligne suivante
#MAILTO=""
#
# Faire un rapport de toutes les nouvelles images 
#   à 14h tous les deux jours, en partant de 
#   l'exemple ci-dessus --- après ceci, 
#   "retoucher" le fichier "stamp". Le "%" est 
#   traité comme un retour chariot, cela vous 
#   permet de mettre plusieurs commandes sur la 
#   même ligne.
0 14 */2 * *  find /shared/images               \
  -cnewer /shared/images/stamp                  \
  -a -iregex ".*\.jpe?g"                        \
  -a -not -regex                                \
    ".*/old/.*"%touch /shared/images/stamp
#
# Jouer une mélodie tous les ans à Noël :)
0 0 25 12 * mpg123 $HOME/musiques/joyeux_noel.mp3
#
# Imprimer la liste des courses tous les mardis 
#   à 17 heures...
0 17 * * 2 lpr $HOME/liste-courses.txt

Il y a plusieurs autres moyens de spécifier des intervalles que ceux mentionnés dans l'exemple. Par exemple, vous pouvez spécifier un ensemble de valeurs discrètes séparées par des virgules (1,14,23) ou un intervalle (1-15), ou même combiner les deux (1-10,12-20), éventuellement avec un pas (1-12,20-27/2). Maintenant, il vous reste à trouver des commandes utiles à y mettre :-)


Tux sur Étoile de MandrakeSoft Linux est une marque déposée de Linus Torvalds. Toutes les autres marques et copyrights sont la propriété de leurs auteurs respectifs.
Sauf mention contraire, tout le contenu de ces pages et toutes les images sont Copyright MandrakeSoft S.A. et MandrakeSoft Inc. 2000.
http://www.linux-mandrake.com/