CRONTAB(5) Formats de fichier CRONTAB(5) NOM crontab -- Fichiers utilises pour planifier l'execution de programmes DESCRIPTION Un fichier crontab contient des instructions pour le demon cron(8) sous la forme simplifiee suivante : << lancer cette commande a telle heure, tel jour >>. Chaque utilisateur peut definir sa propre table crontab, et les commandes contenues dans une table seront executees sous l'identifiant du proprietaire de la table. Les pseudo-utilisateurs Uucp et News disposent generalement de leur propre crontab, ce qui evite d'avoir a invoquer explicitement su(1) dans une commande cron(8). Les lignes vides, les espaces en debut de ligne et les tabulations sont ignorees. Les lignes dont le premier caractere autre qu'une espace est un croisillon << # >> sont considerees comme des commentaires et sont egalement ignorees. Notez que les commentaires ne peuvent pas se trouver sur la meme ligne qu'une commande cron(8), car ils seraient consideres comme faisant partie de la commande a invoquer. De meme, un commentaire ne peut pas se trouver sur la meme ligne qu'une affectation de variable d'environnement. Une ligne active dans une crontab est soit une affectation de variable d'environnement, soit une commande cron(8). Une ligne d'affectation de variable d'environnement est de la forme : nom = valeur ou les espaces autour du signe egal << = >> sont facultatives et ou toutes les espaces ulterieures dans valeur font partie integrante de la valeur affectee a la variable nom. La chaine de valeur peut etre inscrite entre guillemets (simples ou doubles mais correspondants) afin de conserver les espaces initiales et finales. Plusieurs variables d'environnement sont automatiquement definies par le demon cron(8). SHELL prend la valeur << /bin/sh >>, et LOGNAME et HOME sont definies a partir de la ligne de /etc/passwd correspondant au proprietaire de la crontab. HOME et SHELL peuvent etre reaffectees explicitement dans la crontab, LOGNAME ne peut l'etre. Remarque : la variable LOGNAME est parfois nommee USER sur les systemes BSD et est aussi definie automatiquement. En plus de LOGNAME, HOME et SHELL, cron(8) consultera la variable MAILTO s'il doit envoyer le resultat d'une commande executee depuis << cette >> crontab. Si MAILTO est definie (et non vide), le resultat est envoye a l'adresse indiquee. Si MAILTO est definie mais vide (MAILTO=""), aucun courrier ne sera envoye. Sinon, le courrier sera envoye au proprietaire de la crontab. Cette option est utile si vous decidez d'utiliser /bin/mail comme expediteur de messages a la place de /usr/lib/sendmail. Notez cependant que /bin/mail ne prend pas en charge les alias et qu'UUCP ne lit en general pas ses messages. Si MAILFROM est definie (et non vide), son contenu sera utilise comme adresse d'expediteur, sinon c'est << root >> qui sera utilise. Nota : les variables MAILFROM et MAILTO sont remplacees par leur valeur, et les definir comme dans l'exemple suivant fonctionnera comme prevu : MAILFROM=cron-$USER@cron ($USER est remplace par l'utilisateur du systeme). Par defaut, cron(8) envoie un courrier en utilisant l'en-tete << Content-type: text/plain >> avec comme valeur du parametre << charset= >> l'encodage (<< charmap/codeset >>) des parametres regionaux avec lesquels crond(8) a ete lance, c'est-a-dire soit les parametres regionaux par defaut du systeme si aucune variable d'environnement LC_* n'est definie, soit les parametres regionaux indiques par ces variables LC_* (voir locale(7)). Vous pouvez utiliser un autre encodage de caracteres pour envoyer les sorties de taches de cron(8) par message en positionnant les variables CONTENT_TYPE et CONTENT_TRANSFER_ENCODING dans une crontab aux valeurs souhaitees des en-tetes de message de memes noms. La variable CRON_TZ specifie le fuseau horaire specifique a la table de cron(8). L'utilisateur doit saisir dans cette table une heure tenant compte du fuseau horaire specifie. L'heure utilisee pour ecrire dans un fichier journal tient compte quant a elle du fuseau horaire des parametres locaux de la machine ou le demon s'execute. La variable d'environnement MLS_LEVEL fournit la prise en charge de contextes de securite SELinux multiples par tache dans la meme crontab. Par defaut, les taches de cron(8) s'executent avec le contexte de securite SELinux par defaut de l'utilisateur qui a cree le fichier crontab. Lorsqu'on utilise des roles et des niveaux de securite multiples, cela peut ne pas suffire, car un meme utilisateur peut agir sous differents roles ou a des niveaux de securite differents. Pour plus d'informations a propos des roles et de SELinux MLS/MCS, voir selinux(8) et l'exemple de crontab mentionne plus loin dans ce document. Vous pouvez definir la variable MLS_LEVEL avec la chaine du contexte de securite SELinux qui specifie le contexte de securite SELinux particulier dans lequel vous souhaitez que les taches soient executees. crond va alors definir le contexte d'execution des taches qui verifient les specifications du contexte de securite particulier. Pour plus d'informations, voir l'option -s de crontab(1). La variable RANDOM_DELAY permet de retarder le demarrage des taches d'un nombre aleatoire de minutes dont la limite superieure est specifiee par la variable. Le facteur d'echelle aleatoire est determine au cours du demarrage du demon de cron(8) ; il reste donc constant pendant toute la duree d'execution du demon. Le format d'une commande cron(8) est similaire a la norme V7, avec quelques options permettant de garder une compatibilite ascendante. Chaque ligne contient cinq champs de date et d'heure, suivis d'un champ nom_utilisateur (s'il s'agit du fichier crontab du systeme), lui-meme suivi d'une commande. Les commandes sont executees par cron(8) quand les champs << minute >>, << heure >> et << mois de l'annee >> correspondent a la date actuelle, et au moins un des deux champs << jour >> (<< jour du mois >> ou << jour de la semaine >>) correspond a la date actuelle (voir la note qui suit). Notez que cela signifie que les heures qui n'existent pas, comme les << heures manquantes >> pendant les changements d'heure saisonniers, ne correspondront jamais, si bien que les taches planifiees durant ces << heures manquantes >> ne seront pas executees. De meme, les heures qui surviennent plus d'une fois (la encore pendant les changements d'heure saisonniers) feront que les taches correspondantes seront executees deux fois. cron(8) examine les entrees cron(8) chaque minute. Les champs heure et date sont : champ valeurs autorisees ----- -------------- minute 0-59 heure 0-23 jour du mois 1-31 mois 1-12 (ou noms, voir ci-dessous) jour de semaine0-7 (0 ou 7 pour dimanche, ou utiliser des noms) Un champ peut contenir un asterisque << * >> qui correspond a l'intervalle << premier-dernier >>. Les intervalles de nombres sont permis. Ils se presentent sous forme de deux nombres separes par un trait d'union. Les bornes sont comprises. Par exemple, l'intervalle 8-11 dans le champ << heure >> correspond a une execution aux heures 8, 9, 10 et 11. Le premier nombre doit etre inferieur ou egal au second Il est possible de repartir aleatoirement le moment de l'execution dans un intervalle. Un nombre aleatoire est genere dans un intervalle specifie a l'aide de deux nombres separes par un tilde. L'intervalle specifie est inclusif. Par exemple, 6~15 dans le champ des minutes genere un nombre de minutes aleatoire entre 6 et 15. Le nombre aleatoire est genere lors de la lecture du fichier crontab. Le premier nombre doit etre inferieur ou egal au second. Vous pouvez omettre un ou les deux nombres qui specifient l'intervalle. Par exemple, ~ dans le champ des minutes genere un nombre aleatoire de minutes entre 0 et 59. Les listes sont permises. Une liste est un ensemble de nombres ou d'intervalles separes par des virgules. Exemples : << 1,2,5,9 >>, << 0-4,8-12 >>. Des valeurs de << pas >> peuvent etre associees aux intervalles. A la suite d'un intervalle, un << / >> precise le pas a adopter pour parcourir l'intervalle. Par exemple << 0-23/2 >> dans le champ heure demande une execution 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 egalement autorises a la suite d'un asterisque. Ainsi, pour dire << toutes les deux heures >>, on peut utiliser << */2 >>. Veuillez noter que les pas ne sont evalues que dans le champ auquel ils s'appliquent. Par exemple, << */23 >> dans un champ des heures demande d'executer la tache aux heures 0 et 23 d'un jour calendaire. Consulter la rubrique << NOTES >> ci-dessous pour un contournement. On peut aussi utiliser des noms (en anglais) dans les champs des mois ou des jours de la semaine. Utilisez les trois premieres lettres du jour ou du mois considere (pas de difference capitale/minuscule). Les intervalles ou les listes de noms, comme << mon,wed,fri >>, << jan-mar >>, sont acceptes. Si l'UID du proprietaire est 0 (root), le premier caractere d'un champ de la crontab peut etre le caractere << - >>, ce qui empechera cron(8) d'ecrire un message syslog a propos de la commande en cours d'execution. Le sixieme champ (le reste de la ligne) indique la commande a executer. Tout le contenu de cette portion << commande >>, jusqu'au caractere nouvelle ligne ou au caractere << % >>, sera execute par /bin/sh ou par l'interpreteur de commande specifie dans la variable SHELL du fichier cron(8). Un caractere pourcentage << % >> dans la commande est transforme en caractere nouvelle ligne, sauf s'il est precede d'une barre oblique inversee << \ >>, et toutes les donnees se trouvant a la suite du premier << % >> seront transmises a la commande sur son entree standard. Remarque : le jour d'execution d'une commande peut etre indique dans les deux champs << jour du mois >> et << jour de la semaine >>. Si les deux champs sont restrictifs (c'est-a-dire differents de << * >>), la commande sera lancee quand au moins un des champs correspondra a la date actuelle. Par exemple, << 30 4 1,15 * 5 >> executera une commande a 4 h 30 du matin les 1er et 15 de chaque mois, ainsi que chaque vendredi. La syntaxe d'un fichier crontab peut etre verifiee avant son installation en utilisant l'option -T. Consulter crontab(1) pour plus de details. EXEMPLE DE FICHIER CRON # Utiliser /bin/sh pour lancer les commandes sans tenir compte de /etc/passwd SHELL=/bin/sh # Envoyer les resultats a Paul, sans tenir compte du proprietaire de la crontab MAILTO=paul # CRON_TZ=Japan # Executer chaque jour, 5 minutes apres minuit 5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1 # Executer le premier de chaque mois a 14 h 15 - Resultat envoye a Paul 15 14 1 * * $HOME/bin/monthly # Asticoter Joe du lundi au vendredi a 22 h 0 22 * * 1-5 mail -s "Il est 22 h" joe%Joe,%%Ou sont tes enfants ?% 23 0-23/2 * * * echo "execution tous les jours, 23 mn apres 0 h, 2 h, 4 h" 5 4 * * sun echo "execution tous les dimanches a 4 h 05" Taches dans /etc/cron.d/ Les taches dans cron.d et /etc/crontab sont des taches systeme qui sont en general accessibles a plusieurs utilisateurs, et il est donc necessaire de leur ajouter le nom d'utilisateur. MAILTO sur la premiere ligne est facultatif. EXEMPLE DE TACHE DANS /etc/cron.d/job #se connecter en tant que root #creer une tache avec votre editeur prefere (par exemple vim) MAILTO=root * * * * * root touch /tmp/file NOTES Comme indique ci-dessus, les valeurs ignorees ne fonctionnent que pendant la periode a laquelle elles sont attachees. Par exemple, specifier << 0/35 >> comme champ des minutes pour une entree de la crontab ne declenchera pas l'execution de la tache correspondante toutes les 35 minutes ; au lieu de cela, elle sera executee deux fois par heure aux minutes 0 et 35. Pour un controle plus fin, vous pouvez ecrire quelque chose comme suit : * * * * * if [ $(expr (date +s) / 60 58) = 0 ]; then echo execution toutes les 58 minutes; fi 0 * * * * if [ $(expr (date +s) / 3600 23) = 0 ]; then echo execution toutes les 23 h a l'heure ronde; fi Ajuster selon les besoins si votre commande date(1) n'accepte pas << +%s >> comme specificateur de chaine de formatage pour afficher l'horodatage UNIX actuel. SELinux avec securite multi-niveau (MLS). Dans une crontab, il est important de specifier un niveau de securite a l'aide de crontab -s ou en specifiant le niveau requis sur la premiere ligne de la crontab. Chaque niveau est indique dans /etc/selinux/targeted/seusers. Lorsqu'on utilise crontab(1) en mode MLS, il est particulierement important de : - verifier/modifier le role effectif, - definir le role correct pour directory qui est utilise pour les entrees/sorties. EXEMPLE POUR SELINUX MLS # se connecter en tant que root newrole -r sysadm_r mkdir /tmp/SystemHigh chcon -l SystemHigh /tmp/SystemHigh crontab -e # ecrire dans le fichier crontab MLS_LEVEL=SystemHigh 0-59 * * * * id -Z > /tmp/SystemHigh/crontest FICHIERS Le fichier systeme principal de crontab /etc/crontab. Un repertoire /var/spool/cron/ pour stocker les crontab definies par les utilisateurs. Un repertoire /etc/cron.d/ pour stocker les crontab du systeme. VOIR AUSSI cron(8), crontab(1) EXTENSIONS Ces << alias >> speciaux de specification temporelle qui remplacent les cinq champs d'heure et de date initiaux et qui sont prefixes avec le caractere << @ >> sont pris en charge : @reboot : Executer une fois apres le demarrage. @yearly : Executer une fois par an, idem "0 0 1 1 *". @annually : Executer une fois par an, idem "0 0 1 1 *". @monthly : Executer une fois par mois, idem "0 0 1 * *". @weekly : Executer une fois par semaine, idem "0 0 * * 0". @daily : Executer une fois par jour, idem "0 0 * * *". @hourly : Executer une fois par heure, idem "0 * * * *". AVERTISSEMENTS Les fichiers de crontab doivent etre des fichiers ordinaires ou des liens symboliques vers des fichiers ordinaires et ils ne doivent etre ni executables, ni accessibles en ecriture par tout autre utilisateur que leur proprietaire. Il est possible de passer outre cette exigence en utilisant l'option -p sur la ligne de commande de crond. Si inotify est pris en charge, les modifications dans les crontabs liees symboliquement ne sont pas systematiquement rapportees par le demon de cron(8). Pour recharger les crontabs, le demon de cron(8) doit recevoir un signal SIGHUP. Il s'agit d'une limitation de l'API inotify. Chaque entree d'une crontab doit etre terminee par un caractere nouvelle ligne. Si la derniere entree d'une crontab ne se termine pas par un retour a la ligne (autrement dit se termine par EOF), cron la considerera (au moins partiellement) corrompue. Un avertissement sera ecrit dans le journal systeme (<< syslog >>). AUTEUR Paul Vixie TRADUCTION La traduction francaise de cette page de manuel a ete creee par Steve Petruzzello , Nicolas Francois , David Prevot et Lucien Gentis Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . cronie 22 novembre 2012 CRONTAB(5)