NOM
crontab - Tables permettant de gérer le démon cron
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, les espaces et tabulations en début 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
paramètres de 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 facultatives, et où tous
les espaces ultérieures dans valeur feront partie intégrante de la
valeur affectée à la variable nom. La chaîne de valeur peut être
inscrite entre guillemets simples ou doubles afin de protéger les
blancs initiaux et finaux. La chaîne valeur ne supporte pas les
substitutions environnementales, ainsi une ligne comme
PATH = $HOME/bin:$PATH
ne fonctionnera pas comme attendu.
Plusieurs variables d’environnement sont automatiquement définies par
le démon cron(8). SHELL prend la valeur /bin/sh, LOGNAME et HOME sont
définies à partir de la ligne de /etc/passwd correspondant au
propriétaire de la crontab. PATH est définie à « /usr/bin:/bin ». HOME,
SHELL et PATH peuvent être réaffectées explicitement dans la crontab
contrairement à LOGNAME, qui est l’utilisateur ayant lancé la tâche.
(Note : la variable LOGNAME est parfois nommée USER sur les systèmes
BSD. Sur ces systèmes, USER doit aussi être définie.)
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
depuis « cette » crontab. Si MAILTO est définie (et non vide), le
résultat est envoyé à l’utilisateur indiqué. MAILTO peut aussi servir à
envoyer les courriers à plusieurs destinataires en séparant les
destinataires par une virgule. Si MAILTO est définie mais vide
(MAILTO=""), aucun courriel ne sera envoyé. Sinon, le courriel sera
envoyé au propriétaire de la crontab.
Sur les systèmes Debian GNU/Linux, cron gère le module pam_env et
charge les variables d’environnement des fichiers /etc/environment et
/etc/security/pam_env.conf. Toutefois les réglages de PAM n’affectent
pas les réglages décrits ci-dessus ni la configuration dans le fichier
crontab. Veuillez noter en particulier que si vous voulez un autre PATH
que « /usr/bin:/bin », vous devrez le mentionner dans le fichier
crontab.
Par défaut, cron envoie le courrier en utilisant l’en-tête
"Content-type" de "text/plain" avec comme valeur du paramètre
"charset=" l’encodage utilisé par crond(8) à son lancement, i.e. soit
la locale par défaut du système si aucune variable d’environnement LC_*
n’est attribuée, soit la locale spécifiée par ces variables LC_* (voir
locale(7)). Vous pouvez utiliser un autre codage de caractères pour les
messages envoyés par cron en positionnant les variables CONTENT_TYPE et
CONTENT_TRANSFER_ENCODING dans vos crontabs aux valeurs souhaitées des
en-têtes de message correspondants.
Le format d’une commande cron est très proche du standard V7, avec
quelques options permettant de garder une compatibilité ascendante.
Chaque ligne dispose de 5 champs de date et d’heure, suivis d’une
commande et enfin d’un retour à la ligne (« \n »). Le système crontab
(/etc/crontab) utilise le même format, si ce n’est que le champ
utilisateur est indiqué après les champs de date et d’heure mais avant
la commande. Les champs peuvent être séparés par des espaces ou des
tabulations.
Les commandes sont exécutées par cron(8) lorsque les champs minute,
heure et mois de l’année correspondent à la date actuelle, et lorsqu’au
moins l’un des deux champs jour (jour du mois ou jour de la semaine)
correspond au jour actuel (voir « Note » ci-dessous). cron(8) examine
les entrées cron chaque minute. Les champs d’heure et de date sont :
champ valeurs autorisées
----- --------------
minute 0-59
heure 0-23
jour du mois 1-31
mois 1-12 (ou noms, voir ci-dessous)
jour de semaine 0-7 (0 et 7 pour dimanche, ou utiliser 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 trait d’union. Les bornes sont incluses.
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 un ensemble 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 « */2 ».
On peut employer le nom des mois ou des jours de la semaine (en
anglais), 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 pourcent (%) dans les commandes
seront transformés en retour-chariot, sauf s’ils sont précédé par un
backslash \. Toutes les données se trouvant à la suite du premier %
seront transmises à la commande sur son entrée standard. Il n’est pas
possible d’écrire une commande sur plusieurs lignes, comme on le ferait
dans un shell avec le \ final.
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. différents de « * »), la commande sera lancée quand
lun des champs au moins correspond à la date en cours. Par exemple
« 30 4 1,15 * 5 » exécutera une commande à 4 h 30 du matin les 1er et
15 de chaque mois, ainsi que chaque vendredi.
À la place des cinq premiers champs peut apparaître l’une des huit
chaînes spéciales :
chaîne signification
------ -------
@reboot Exécuter une fois au démarrage.
@yearly Exécuter une fois par an, « 0 0 1 1 * ».
@annually (idem que @yearly)
@monthly Exécuter une fois par mois, « 0 0 1 * * ».
@weekly Exécuter une fois par semaine, « 0 0 * * 0 ».
@daily Exécuter une fois par jour, « 0 0 * * * ».
@midnight (idem que @daily)
@hourly Exécuter une fois par heure, « 0 * * * * ».
EXEMPLE DE FICHIER CRONTAB
# Utiliser /bin/bash pour lancer les commandes, plutôt que le shell par
# défaut /bin/sh
SHELL=/bin/bash
# Envoyer les résultats à Paul, sans tenir compte du propriétaire
MAILTO=paul
#
# Exécuter chaque jour, 5 minutes après minuit
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# Exécuter le premier de chaque mois à 14 h 15 - Résultat envoyé à Paul
15 14 1 * * $HOME/bin/monthly
# Énerver Joe du lundi au vendredi à 22 h
0 22 * * 1-5 mail -s "Il est 22 h" joe%Joe,%%Où sont tes enfants ?%
23 0-23/2 * * * echo "Tous les jours, 23 mn après 0 h, 2 h, 4 h..."
5 4 * * sun echo "Tous les dimanches à 4 h 05"
EXEMPLE DE FICHIER SYSTÈME CRON
Le champ utilisateur est présent, il est utilisé comme dans le fichier
/etc/crontab.
# /etc/crontab: crontab du système
# A la différence des autres crontabs, vous n’avez pas besoin d’exécuter
# la commande crontab pour installer la nouvelle version quand vous
# modifiez ce fichier. Ce fichier possède aussi un champ utilisateur que
# les autres crontabs n’ont pas.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow utilisateur commande
42 6 * * * root run-parts --report /etc/cron.daily
47 6 * * 7 root run-parts --report /etc/cron.weekly
52 6 1 * * root run-parts --report /etc/cron.monthly
#
# Supprime l’invocation d’anacron, puisque cela est maintenant géré par
# un fichier dans /etc/cron.d
VOIR AUSSI
cron(8), crontab(1)
EXTENSIONS
Dans la désignation du jour de la semaine, le 0 et le 7 correspondent
tous deux au dimanche. BSD et AT&T ne sont pas entièrement 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 AT&T 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 ».
Le nom des mois ou des jours de la semaine peut être utilisé.
Les variables d’environnement peuvent être définies dans la crontab.
Avec BSD ou AT&T, l’environnement transmis aux processus fils est
globalement celui de /etc/rc.
La sortie des commandes est soit envoyée au propriétaire de la crontab
(pas sous BSD), soit dirigée vers une autre personne (pas sous SysV),
soit la redirection est désactivée et aucun courriel ne sera envoyé
(pas sous SysV non plus).
Toutes les commandes « @ » qui peuvent apparaître dans l’un des cinq
premiers champs sont des extensions.
AUTEUR
Paul Vixie <paul@vix.com>
TRADUCTION
Cette page de manuel a été traduite et mise à jour par Christophe
Blaess entre 1997 et 2003. La version présente dans Debian est
dorénavant maintenue par Steve Petruzzello <dlist AT bluewin DOT ch> et
les membres de la liste <debian-l10n-french AT lists DOT debian DOT
org>. Veuillez signaler toute erreur de traduction par un rapport de
bogue sur le paquet manpages-fr-extra.