Provided by: manpages-fr_4.23.1-1_all bug

NOM

       crontab — Tables permettant de gérer le démon de 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 de devoir
       invoquer explicitement su(1) dans une commande cron(8).

       Notez que les commentaires situés sur la même ligne que la commande cron(8) ne sont pas
       interprétés comme des commentaires au sens de cron(8), mais sont considérés comme faisant
       partie de la commande et transmis à l'interpréteur de commande. Il en est pratiquement de
       même pour les commentaires situés sur la même ligne qu'une définition de variable
       d'environnement.

       Une ligne active dans une crontab sera soit une affectation de variable d'environnement,
       soit une commande cron(8). Une ligne d'affectation d'environnement est de la forme :

           nom = valeur

       où les espaces autour du signe égal « = » sont facultatives et où toutes les espaces
       ultérieures dans valeur feront partie intégrante de la valeur affectée à la variable nom.
       La chaîne valeur peut être inscrite entre guillemets (simples ou doubles mais
       correspondants) afin de conserver les espaces initiales et finales. Les guillemets peuvent
       être utilisés pour définir les variables vides.

       La chaîne valeur n'est pas interprétée pour les substitutions environnementales, le
       remplacement de variables ou le raccourci tilde(~), si bien que des lignes comme :

           PATH=$HOME/bin:$PATH
           PATH=~/bin:/usr/bin

       ne fonctionneront pas comme vous vous y attendez. Celles-ci ne fonctionneront pas non
       plus :

           A=1
           B=2
           C=$A $B

       Il n'y aura pas de substitution pour les variables définies dans la dernière valeur. Avec
       la plupart des interpréteurs de commande, vous pouvez cependant aussi essayer par
       exemple :

           P=PATH=/a/b/c:$PATH
           33 22 1 2 3 eval $P && commandes

       Plusieurs variables d'environnement sont automatiquement définies par le démon cron(8).
       SHELL prend la valeur « /usr/bin/sh », LOGNAME et HOME sont définies à partir de la ligne
       de /etc/passwd correspondant au propriétaire de la crontab. HOME et SHELL peuvent être
       réaffectées explicitement dans la crontab, contrairement à LOGNAME qui ne peut l'être.

       Remarque : 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) consultera 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'adresse indiquée. Si MAILTO est définie mais vide
       (MAILTO=""), aucun courrier ne sera envoyé. Sinon, le courrier sera envoyé au propriétaire
       de la crontab. Cette option est utile si vous décidez d'utiliser /usr/bin/mail comme
       expéditeur de messages à la place de /usr/lib/sendmail lorsque vous installez cron(8).
       Notez cependant que /usr/bin/mail ne prend pas en charge les alias et qu'UUCP ne lit en
       général pas ses messages.

       Le format d'une commande cron(8) est très proche de la norme V7, avec quelques extensions
       permettant de garder une compatibilité ascendante. Chaque ligne dispose de cinq champs de
       date et d'heure, suivis d'une commande et enfin d'un retour à la ligne (« \n »). La
       crontab système (/etc/crontab) utilise le même format, si ce n'est que le champ
       identifiant 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. La taille maximale permise
       pour le champ de commande est de 998 caractères.

       Les commandes sont exécutées par cron(8) quand les champs « minute », « heure » et « mois
       de l'année » correspondent à la date actuelle, et au moins un des deux champs « jour »
       (« jour du mois » ou « jour de la semaine ») correspond à la date actuelle (voir la
       remarque ci-après). cron(8) examine les entrées cron chaque minute. Les champs heure et
       date sont :

       ┌───────────────────┬─────────────────────────────────┐
       │champvaleurs autorisées              │
       ├───────────────────┼─────────────────────────────────┤
       │minute             │ 0-59                            │
       ├───────────────────┼─────────────────────────────────┤
       │heure              │ 0-23                            │
       ├───────────────────┼─────────────────────────────────┤
       │jour du mois       │ 0-31                            │
       ├───────────────────┼─────────────────────────────────┤
       │mois               │ 0-12 (ou noms, voir ci-dessous) │
       ├───────────────────┼─────────────────────────────────┤
       │jour de la semaine │ 0-7 (0 ou 7 pour dimanche, ou   │
       │                   │ utiliser des noms)              │
       └───────────────────┴─────────────────────────────────┘

       Un champ peut contenir seulement un astérisque « * », qui correspond toujours à
       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 comprises. 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. Exemples : « 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 heure demande une exécution toutes les heures paires. Une
       alternative avec la norme 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 capitale/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 caractère nouvelle ligne ou au caractère « % », sera exécuté par
       /usr/bin/sh ou par l'interpréteur de commande mentionné dans la variable SHELL du fichier
       cron(8). Les caractères pourcentage « % » dans les commandes seront transformés en
       caractères nouvelle ligne, sauf s'ils sont précédés d'une barre oblique inversée « \ ».
       Toutes les données se trouvant à la suite du premier « % » seront transmises à la commande
       sur son entrée standard.

       Remarque : le jour de l’exécution de la commande peut être indiqué avec deux champs — jour
       du mois et jour de la semaine. Si les deux champs sont restreints (c’est-à-dire ne sont
       pas *), la commande sera exécutée quand chaque champ correspond à l’heure actuelle. 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. Il est toutefois possible d'obtenir le résultat
       voulu en ajoutant un test à la commande (voir le dernier exemple dans la section EXEMPLE
       DE FICHIER CRONTAB plus bas).

       À la place des cinq premiers champs, on peut trouver une des huit chaînes suivantes :

       ┌──────────┬──────────────────────────────────┐
       │chaînesignification                    │
       ├──────────┼──────────────────────────────────┤
       │@reboot   │ Exécuter une fois au démarrage.  │
       ├──────────┼──────────────────────────────────┤
       │@yearly   │ Exécuter une fois par an, "0 0 1 │
       │          │ 1 *".                            │
       ├──────────┼──────────────────────────────────┤
       │@annually │ (identique à @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 │ (identique à @daily)             │
       ├──────────┼──────────────────────────────────┤
       │@hourly   │ Exécuter une fois par heure, "0  │
       │          │ * * * *".                        │
       └──────────┴──────────────────────────────────┘

       Veuillez noter que « démarrage », dans le cas de @reboot, correspond au moment où le démon
       de cron(8) démarre. En particulier, il peut se situer avant le démarrage de certains
       démons système ou autres services. Cela dépend de l'ordonnancement de la séquence de
       démarrage de la machine.

EXEMPLE DE FICHIER CRON

           # Utiliser /usr/bin/sh pour lancer les commandes, sans tenir compte de ce que dit /etc/passwd
           SHELL=/usr/bin/sh
           # Envoyer les résultats à Paul, sans tenir compte du propriétaire de la crontab
           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
           # Asticoter 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 "exécuter tous les jours, 23 mn après 0 h, 2 h, 4 h ...."
           5 4 * * sun     echo "exécuter tous les dimanches à 4 h 05"
           0 */4 1 * mon   echo "exécuter toutes les 4 heures le premier du mois et tous les lundis"
           0 0 */2 * sun   echo "exécuter à minuit tous les dimanches dont la date est impaire"
           # Exécuter tous les deuxièmes samedis du mois
           0 4 8-14 * *    test $(date +\%u) -eq 6 && echo "deuxième samedi"
           # Même chose, aussi efficace :
           0 4 * * * Sat   d=$(date +e) && test $d -ge 8 -a $d -le 14 && echo "deuxième samedi"
           # Exécuter tôt le lendemain du premier jeudi de chaque mois
           57 2 * * 5 case $(date +d) in 0[2-8]) echo "Après le premier jeudi"; esac

       Tous les exemples ci-dessus exécutent des programmes non interactifs. Si vous souhaitez
       exécuter un programme qui interagit avec le bureau de l'utilisateur, vous devez vous
       assurer que la variable d'environnement DISPLAY est correctement définie.

           # Exécuter un programme et envoyer une notification chaque jour à 10:00
           0 10 * * *  $HOME/bin/program | DISPLAY=:0 notify-send "Exécution programme" "$(cat)"

EXEMPLE DE FICHIER CRONTAB SYSTÈME

       Vous trouverez dans ce qui suit le contenu d'un fichier crontab ordinaire valable pour
       l'ensemble du système. À la différence du fichier crontab d'un utilisateur, ce fichier
       comporte un champ « nom_utilisateur », tel qu'utilisé par /etc/crontab.

           # /etc/crontab : fichier crontab valable pour tout le système
           # À la différence des autres crontabs, vous n'avez pas besoin
           # d'exécuter la commande « crontab » pour installer une nouvelle
           # version de ce fichier et des fichiers dans /etc/cron.d. Ces
           # fichiers possèdent aussi des champs nom_utilisateur, alors que
           # les autres crontabs n'en possèdent pas.

           SHELL=/bin/sh
           PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

           # Exemple de définition d'une tâche :
           # .---------------- minute (0 - 59)
           # |  .------------- heure (0 - 23)
           # |  |  .---------- jour du mois (1 - 31)
           # |  |  |  .------- mois (1 - 12) OU jan,feb,mar,apr ...
           # |  |  |  |  .---- jour de semaine (0 - 6) (Dimanche=0 ou 7) OU sun,mon,tue,wed,thu,fri,sat
           # |  |  |  |  |
           # m h dom mon dow commande_utilisateur
           17 * * * *  root  cd / && run-parts --report /etc/cron.hourly
           25 6 * * *  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
           47 6 * * 7  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
           52 6 1 * *  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
           #

       Notez que toutes les tâches valables pour tout le système vont s'exécuter, par défaut, de
       06:00 à 07:00. Si le système est hors tension pendant ce créneau, seules les tâches
       horaires seront exécutées, à moins que les réglages par défaut ci-dessus ne soient
       modifiés.

ENCORE UN AUTRE EXEMPLE

       Cet exemple montre que l'on peut faire précéder les nombres d'un certain nombre de 0 de
       façon à aligner les colonnes.

           17  * * * *  root  cd / && run-parts --report /etc/cron.hourly
           25 16 * * *  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
           47 06 * * 7  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
           52 06 1 * *  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

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, ce avec quoi BSD et AT&T semblent ne pas être d'accord.

       Les intervalles et les listes sont autorisés dans un même champ. « 1-3,7-9 » sera
       cependant rejeté par le cron(8) AT&T ou BSD, car il n'accepte que « 1-3 » ou « 7,8,9 »
       SEULS.

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

       Les mois et les jours de la semaine peuvent être spécifiés à l'aide de leurs noms.

       Les variables d'environnement peuvent être définies dans la crontab. Avec BSD ou AT&T,
       l'environnement transmis aux processus enfants est globalement celui issu 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 courrier ne sera envoyé (pas sous SysV non plus).

       Toutes les commandes « @ » qui peuvent apparaître à la place d'un des cinq premiers champs
       sont des extensions.

LIMITES

       Le démon cron s'exécute avec un fuseau horaire défini. Il ne prend actuellement pas en
       charge les fuseaux horaires par utilisateur. Toutes les tâches, celles du système et
       celles de l'utilisateur, seront exécutées en tenant compte du fuseau horaire défini. Même
       si un utilisateur définit la variable d'environnement TZ dans sa crontab, cela n'affectera
       que les commandes exécutées dans la crontab, pas le moment d'exécution des tâches de la
       crontab elles-mêmes. Si on veut spécifier un fuseau horaire particulier pour une tâche de
       la crontab, il faut tester la date dans un script enfant, comme dans cet exemple :

           # m h  dom mon dow   commande

               TZ=UTC
           0 * * * * [ "$(date +\%R)" = 00:00 ] && exécuter_un_script

       La norme POSIX spécifie que les deux champs jour_du_mois et jour_de_la_semaine doivent
       correspondre à l'heure actuelle si le contenu d'un des deux est égal à « * ». Cependant
       cette implémentation vérifie seulement si le premier caractère est « * ». C'est pourquoi
       « 0 0 */2 * sun » lancera la tâche correspondante tous les dimanches dont la date est
       impaire, alors qu'avec la norme POSIX, la tâche aurait été lancée tous les dimanches et à
       chaque date impaire.

       La syntaxe de la crontab ne permet pas de définir toutes les périodes possibles et
       imaginables. Par exemple, il n'est pas évident de définir le dernier jour de la semaine
       d'un mois donné. Pour qu'une tâche s'exécute à une période qui ne peut pas être définie en
       utilisant la syntaxe de la crontab, la meilleure approche consiste à faire tester la date
       et l'heure par le programme lui-même et à ne continuer l'exécution que si la période
       correspond à celle que l'on souhaite.

       Si le programme ne peut pas faire les tests lui-même, un script d'enveloppe sera peut-être
       nécessaire. ncal et calendar sont des outils qui peuvent faciliter les analyses de dates.
       Par exemple, pour exécuter un programme le dernier samedi de chaque mois, vous pourriez
       utiliser le code d'enveloppe suivant :

           0 4 * * Sat   [ "$(date +\%e)" = "$(LANG=C ncal | sed -n 's/^Sa .* \([0-9]\+\) *$/\1/p')" ] && echo "Dernier samedi" && programme_à_exécuter

UTILISER EVAL POUR ENCAPSULER DIVERSES DÉFINITIONS DE L'ENVIRONNEMENT

       L'exemple suivant est fourni gracieusement par 積丹尼 Dan Jacobson :

           CONTENT_TYPE="text/plain; charset=UTF-8"
           d=eval LANG=zh_TW.UTF-8 w3m -dump
           26 22 16 1-12 * $d https://www.ptt.cc/bbs/transgender/index.html

       il ne fonctionnera pas sans le eval. Utiliser

           d=LANG=zh_TW.UTF-8 w3m -dump

       conduira à

           /bin/sh: LANG=zh_TW.UTF-8: command not found

DIAGNOSTICS

       Chaque entrée d'une crontab doit être terminée par un caractère nouvelle ligne. Si la
       dernière entrée d'une crontab ne se termine pas par un retour à la ligne (autrement dit se
       termine par EOF), cron la considérera (au moins partiellement) corrompue. Un avertissement
       sera écrit dans le journal système (« syslog »).

AUTEURS

       Paul Vixie <paul@vix.com>
           A écrit cette page de manuel (1994).

       Steve Greenland <stevegr@debian.org>
           Responsable du paquet (1996-2005).

       Javier Fernández-Sanguino Peña <jfs@debian.org>
           Responsable du paquet (2005-2014).

       Christian Kastner <ckk@debian.org>
           Responsable du paquet (2010-2016).

       Georges Khaznadar <georgesk@debian.org>
           Responsable du paquet (2022-2024).

COPYRIGHT

       Copyright © 1994 Paul Vixie

       Distribuable librement, mais ne supprimez pas mon nom des sources ou de la documentation
       (ne vous appropriez pas mon travail), indiquez vos modifications (ne me rendez pas
       responsable de bogues potentiels), ne modifiez pas ou ne supprimez pas cette note.
       Vendable si le code source à construire est fourni aux acheteurs. Aucune garantie d'aucune
       sorte, explicite ou implicite, n'est incluse avec ce logiciel ; vous l'utilisez à vos
       risques et périls, l'utilisateur est pleinement responsable des dommages (s'il y en a) à
       des tiers du fait de l'utilisation de ce logiciel."

       Depuis 1994, de nombreuses modifications ont été apportées à cette page de manuel,
       effectuées par les développeurs Debian responsables de cron ; leur liste figure brièvement
       ci-dessus, vous pouvez trouver davantage d'informations dans
       /usr/share/doc/cron/copyright.

TRADUCTION

       La traduction française de cette page de manuel a été créée par Steve Petruzzello
       <dlist@bluewin.ch>, Nicolas François <nicolas.francois@centraliens.net>, David Prévot
       <david@tilapin.org> et Lucien Gentis <lucien.gentis@waika9.com>

       Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General
       Public License version 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ concernant les
       conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un
       message à ⟨debian-l10n-french@lists.debian.org⟩.