|
Article in other languages: |
crontab est le nom du programme sous Unix (ou Linux) qui permet d'éditer des tables de configuration du programme cron. Par extension, on appelle souvent cron (ou cron job en anglais) toute application lancée à horaire fixe. La commande crontab édite en fait un fichier relatif à l'utilisateur qui l'exécute, et en vérifie la syntaxe. Ce fichier se situe dans l'arborescence /var, par exemple :
Ainsi pour l'utilisateur root sur une machine Debian, la table cron sera stockée dans :
La majorité des systèmes Linux (SuSE, Debian, Red Hat) disposent en plus d'une crontab centralisée dans /etc/crontab. On trouve également des dossiers /etc/cron.d, /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly et /etc/cron.monthly qui contiennent les tables cron des différents parties du système (rotation des logs, mise à jour de fichiers...). Pour les postes de travail qui ne fonctionnent pas forcément 24h/24, une application appelée anacron permet de lancer les commandes qui auraient du l'être lorsque l'ordinateur était éteint.
SyntaxeVisualisationAfin d'afficher le contenu de la table cron (pour l'utilisateur courant), il suffit d'exécuter la commande suivante :
$ crontab -l
Cette commande ne permet pas d'afficher la crontab centralisée (/etc/crontab). ModificationAfin d'éditer la table cron (pour l'utilisateur courant), il suffit d'exécuter la commande suivante :
$ crontab -e
Cette commande a pour effet de lancer l'éditeur par défaut[1] (en général vi) présentant la table actuelle (donc aucune s'il s'agit du premier lancement de crontab). Cette commande ne permet pas de modifier la crontab centralisée (/etc/crontab). Chaque entrée de la table (chaque ligne) correspond à une tâche à exécuter et est notée de la façon suivante : mm hh jj MMM JJJ tâche > log Dans cette syntaxe :
Pour chaque unité de temps (minute/heure/...) les notations sont possibles:
Si, sur la même ligne, on trouve précisées une unité de temps « numéro du jour du mois » et une unité de temps « jour de la semaine », celles-ci sont considérées par crontab comme cumulatives. Exemples
Imaginons que l'on veuille faire un journal (dans le fichier /tmp/log_df.txt par exemple) automatisé de l'espace disque libre (commande df) à des intervalles de temps précis :
30 23 * * * df >>/tmp/log_df.txt
5 * * * * df >>/tmp/log_df.txt
30 23 1 * * df >>/tmp/log_df.txt
28 22 * * 1 df >>/tmp/log_df.txt
12 10 2-5 * * df >>/tmp/log_df.txt
59 23 */2 * * df >>/tmp/log_df.txt
*/5 * * * * df >>/tmp/log_df.txt
0 0 28-31 * * [ `/bin/date +\%d` -gt `/bin/date +\%d -d "1 day"` ] && df >>/tmp/log_df.txt
0 0 * * 0 [ `/bin/date +\%d` -gt `/bin/date +\%d -d "7 day"` ] && df >>/tmp/log_df.txt
0 0 25-31 1,3,5,7,8,10,12 0 my-script.sh 0 0 24-30 4,6,9,11 0 my-script.sh 0 0 22-29 2 0 my-script.sh
0 0 21-31 * * /bin/script.sh $ cat /bin/script.sh
$ cat /bin/script.sh #!/bin/sh dernierdimanche=`cal -m | awk '{print $7}' | tail -1` aujourdhui=`date +%d` if [ $aujourdhui -eq $dernierdimanche ] then df >>/tmp/log_df.txt else echo "Nous ne sommes pas encore le dernier dimanche du mois." fi
0 0 * * 0 [ `date '+\%e'` -le 7 ] && df >>/tmp/log_df.txt
0 0 1-7 * * /bin/script2.sh $ cat /bin/script2.sh
$ cat /bin/script2.sh #!/bin/sh premierdimanche=`cal -m | awk '{print $7}' | head -3 | tail -1` aujourdhui=`date +%d` if [ $aujourdhui -eq $premierdimanche ] then df >>/tmp/log_df.txt else echo "Nous ne sommes pas encore le premier dimanche du mois." fi
#!/bin/sh DATE=$(date +%d-%m-%Y-%H-%M) /usr/local/mysql/bin/mysqldump -u root ccmusers > /home/backup/ccmusers${DATE}.sql Ainsi pour automatiser (chaque jour à 23h59) le backup de la table ccmusers de MySQL et l'appel d'une page web (chaque jour à 21h30), il suffira d'ajouter l'entrée suivante dans la table cron: 59 23 * * * /home/backup/backup.cmd >>/dev/null 30 21 * * * wget -O /dev/null http://example.com/mapage.html >>/dev/null Changements d'heure : Si vous utilisez le changement d'heure hiver/été, selon les règles en vigueur en France, les tâches Cron entre 02h00 et 02h59 du dernier dimanche du mois de mars ne seront pas exécutées (on passe de 2h à 3h). À l'inverse, les tâches Cron entre 02h00 et 02h59 du dernier dimanche du mois d'octobre seront exécutées deux fois (on passe de 3h à 2h). Cependant, la plupart des systèmes Unix sont configurés pour utiliser au niveau système le UTC, qui n'est pas sujet à ces règles de changement d'heure et évite donc ce désagrément. ATTENTION un "man cron" sur un système linux type debian indique le contraire, merci, à qui de droit de corriger l'article proprement, extrait du man :
Il existe des dispositions spéciales lorsque l'horloge est modifiée de
moins de 4 heures, par exemple au début et à la fin de l'heure d'été.
Si l'heure a été avancée, les travaux qui auraient dû être exécutés à
ce moment là le seront juste après le changement. À l'inverse, si
l'heure a été retardée de moins de 3 heures, les travaux qui tombent
dans cet intervalle de temps ne seront pas exécutés de nouveau.
Seuls les travaux qui sont exécutés à un moment particulier (ni
spécifiés par @hourly ni par « * » dans le champ heure ou minute) sont
affectés. Les travaux spécifiés avec des astérisques sont exécutés
immédiatement sur la base de l'heure modifiée.
Les changements d'horloge de plus de 3 heures sont considérés comme des
corrections de l'horloge, et la nouvelle heure est utilisée immédiate-
ment.
cron journalise ses actions à l'aide du paramètre « cron » de syslog,
et la journalisation peut être contrôlée en utilisant le système stan-
dard syslogd(8).
Voir aussiArticles connexesLiens externes
SourcesCertains passages de cet article, ou d'une version antérieure de cet article, sont basés sur l'article Ordonnancer des tâches du site Web Comment ça marche ?. L'article d'origine porte la notice de copyright suivante : « © Copyright 2004 Jean-François Pillou - Hébergé par Web-solutions.fr. Ce document issu de CommentCaMarche.net est soumis à la licence GNU FDL. Vous pouvez copier, modifier des copies de cette page tant que cette note apparaît clairement. » (en) Unix pour les nuls Notes
Questions for article: |
This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.
IHS Europe: Infrared Heating Systems for Home and Business.