man crontab (Formats) - Table permettant de gérer le démon Cron.

NOM

crontab - Table 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 nomindiqué. La chaîne de valeur peut être inscrite entre guillemets ou entre quotes 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 rempli 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). Notez que les moments non-existants, comme les heures manquantes au moment des changements d'heure, ne seront jamais mis en correspondance, et leurs jobs ne seront pas exécutés. De même, les moments se reproduisant deux fois (encore pendant les changements d'heure) déclencheront le même job deux fois.

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. A 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 « */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). 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é part 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"

VOIR AUSSI

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 champs. "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 <paul@vix.com>

TRADUCTION

Christophe Blaess, 1999-2003.