CRONTAB(5)

NOM
crontab - Tables permettant de gérer le démon cron

DESCRIPTION
Un fichier crontab contient des instructions pour le démon cron(8). Ces instructions ont la forme générale suivante : « lancer cette commande à telle heure, tel jour ». Chaque utilisateur dispose de sa propre table crontab, et les commandes contenues dans une table seront exécutées sous l'identifiant du propriétaire de la table. Les pseudo-utilisateurs uucp et news disposent généralement de leurs propres crontabs, ce qui évite d'invoquer explicitement su(1) dans une commande cron.

Les lignes blanches, et les espaces et tabulations en tête de lignes sont ignorées. Les lignes dont le premier caractère non-blanc est un dièse « # » sont considérées comme des commentaires, et sont également ignorées. Notez que les commentaires ne peuvent pas se trouver sur la même ligne qu'une commande cron, car ils seraient considérés comme des arguments en ligne pour la commande à invoquer. De même, un commentaire ne peut pas se trouver sur la même ligne qu'une affectation de variable d'environnement.

Une ligne active dans une crontab devra donc être soit une affectation de variable d'environnement, soit une commande cron. Une ligne d'affectation d'environnement est de la forme

    nom = valeur

où les espaces autour du signe égal « = » sont facultatifs, et où tous les espaces ultérieurs feront partie intégrante de la valeur affectée à la variable ayant le nom indiqué. La chaîne de valeur peut être inscrite entre guillemets ou entre apostrophes afin de protéger les blancs initiaux et finaux.

Plusieurs variables d'environnement sont automatiquement configurées par le démon cron(8). SHELL est remplie avec /bin/sh, LOGNAME et HOME sont configurées à partir de la ligne de /etc/passwd correspondant au propriétaire de la crontab. HOME et SHELL peuvent être surchargés par des affectations explicites dans la crontab, LOGNAME non.

(Note : la variable LOGNAME est parfois nommée USER sur les systèmes BSD, elle sera alors configurée).

En plus de LOGNAME, HOME, et SHELL, cron(8) prendra en compte la variable MAILTO s'il doit envoyer le résultat d'une commande exécutée dans « cette » crontab. Si MAILTO est définie (et non vide), le résultat est envoyé à l'utilisateur indiqué. Si MAILTO est défini et vide (MAILTO=""), aucun courrier ne sera envoyé. Sinon, le courrier sera émis vers le propriétaire de la crontab. Cette option est utile si vous utilisez /bin/mail comme agent à la place de /usr/lib/sendmail lorsque vous installez cron. /bin/mail ne gère pas d'alias, et UUCP ne lit généralement pas son courrier.

Le format d'une commande cron est très proche du standard V7, avec quelques options gardant une compatibilité ascendante. Chaque ligne dispose de 5 champs de date et heure, suivi d'un nom d'utilisateur s'il s'agit du fichier crontab central du système, suivi d'une commande. Les commandes sont exécutées par cron(8) lorsque les champs minute, heure, et mois de l'année correspondent à la date et quand au moins l'un des deux autres champs (jour du mois, jour de la semaine) correspond aussi (voir le paragraphe « Note » plus bas).

cron(8) examine ses données une fois par minute. Les champs de date et heure sont :

    champs    valeurs autorisées
    -----    --------------
    minute    0-59
    heure    0-23
    jour du mois    0-31
    mois    0-12 (ou noms, voir plus bas)
    jour de semaine    0-7 (0 et 7 sont Dimanche, ou les noms)

Un champ peut contenir un astérisque « * », qui correspond à l'intervalle « premier-dernier »

Les intervalles de nombres sont permis. Ils se présentent sous forme de deux nombres séparés par un tiret. Les bornes sont inclues. Par exemple, l'intervalle horaire 8-11 correspond à une exécution aux heures 8, 9, 10, et 11.

Les listes sont permises. Une liste est une série de nombres ou d'intervalles séparés par des virgules. Exemple « 1,2,5,9 », « 0-4,8-12 ».

Des valeurs de « pas » peuvent être associées aux intervalles. À la suite d'un intervalle, un « /<nombre> » précise le pas à adopter pour parcourir l'intervalle. Par exemple « 0-23/2 » dans le champ horaire demande une exécution toutes les heures paires. Une alternative avec le standard V7 serait « 0,2,4,6,8,10,12,14,16,18,20,22 »). Les pas sont également autorisés à la suite d'un astérisque, ainsi, pour dire « toutes les deux heures », on peut utiliser simplement « */2 ».

On peut employer les noms des mois ou des jours de la semaine, en utilisant les trois premières lettres (pas de différence majuscule/minuscule). (Ndt : en anglais !) Les intervalles, ou les listes de noms ne sont pas acceptés.

Le « sixième » champ (le reste de la ligne) indique la commande à exécuter. Tout le reste de la ligne, jusqu'au retour chariot ou au caractère « % », sera exécuté par /bin/sh, ou par le shell mentionné dans la variable SHELL du fichier cron. Les signes pourcentages « % » dans les commandes seront transformés en retour-chariot, sauf s'ils sont précédés par un backslash « \ ». Toutes les données se trouvant à la suite du premier % seront transmises à la commande sur son entrée standard.

Note : Le jour d'exécution d'une commande peut être spécifié par deux champs (jour du mois, et jour de la semaine). Si les deux champs sont remplis (c.-à-d. pas *), la commande sera lancée quand l'un des champs correspond à la date en cours. Par exemple
« 30 4 1,15 * 5 » exécutera une commande à 4:30 du matin les 1er et 15 de chaque mois, ET chaque Vendredi.

EXEMPLE DE FICHIER CRONTAB
# utiliser /bin/sh pour lancer les commandes, quoiqu'en dise /etc/passwd.
SHELL=/bin/sh
# Envoyer les résultats à Paul, sans tenir compte du propriétaire
MAILTO=paul
#
# Chaque jour, 5 minutes après Minuit
5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# Le premier de chaque mois à 14h15 - Résultat envoyé à Paul
15 14 1 * *     $HOME/bin/monthly
# Les jours de la semaine à 22h, énerver Joe
0 22 * * 1-5	mail -s "Il est 22h" joe%Joe,%%Où sont tes enfants ?%
23 0-23/2 * * * echo "Tous les jours, à 23mn après 0h, 2h, 4h..."
5 4 * * sun     echo "Tous les dimanches à 4h 05"

EXTENSIONS
Dans l'utilisation du jour de la semaine, le 0 et le 7 correspondent tous deux au Dimanche. BSD et ATT ne sont pas tout à fait d'accord là-dessus.

On autorise les intervalles et les listes dans le même champ. « 1-3,7-9 » sera rejeté par le cron ATT ou BSD, ils n'acceptent que « 1-3 » ou « 7,8,9 ».

Les intervalles peuvent inclure des « pas », ainsi « 1-9/2 » équivaut à « 1,3,5,7,9 ».

Les noms des mois ou des jours de la semaine peuvent être utilisés.

Les variables d'environnement peuvent être configurées dans la crontab. Avec BSD ou ATT, les environnements transmis aux processus fils sont globalement ceux de /etc/rc.

La sortie des commandes est normalement envoyée au propriétaire de la crontab (pas sous BSD), mais peut être dirigée vers une autre personne (pas sous SysV), ou l'on peut empêcher toute redirection du courrier (pas sous SysV non plus).

AUTEUR
Paul Vixie <vixie@isc.org>

VOIR AUSSI
cron(8), crontab(1)

TRADUCTION

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 2 mai 1999 et révisée le 19 novembre 2007.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 5 crontab ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.