Syntaxe de la table du CRONTAB
Chaque entrée de la table (chaque ligne) correspond à une tâche à exécuter avec la syntaxe :
mm hh jj MMM JJJ tâche
-
mm représente les minutes (de 0 à 59)
-
hh représente l’heure (de 0 à 23)
-
jj représente le numéro du jour du mois (de 1 à 31)
-
MMM représente l’abréviation du nom du mois (jan, feb, …) ou bien le numéro du mois (de 1 à 12)
-
JJJ représente l’abréviation du nom du jour ou bien le numéro du jour dans la semaine :
-
0 = dimanche
-
1 = lundi
-
2 = mardi
-
…
-
6 = samedi
-
7 = dimanche (représenté deux fois pour les deux types de semaine)
-
Pour chaque valeur numérique (mm, hh, jj, MMM, JJJ) les notations possibles sont :
-
* : à chaque unité (0, 1, 2, 3, 4…)
-
5,8 : les unités 5 et 8
-
2-5 : les unités de 2 à 5 (2, 3, 4, 5)
-
*/3 : toutes les 3 unités (0, 3, 6, 9…)
-
10-20/3 : toutes les 3 unités, entre la dixième et la vingtième (10, 13, 16, 19)
Si, sur la même ligne, le « numéro du jour du mois » et le « jour de la semaine » sont renseignés, alors cron exécutera la tâche quand l’un des champs correspond.
Par exemple, la ligne suivante indique que la tâche doit être exécutée les vendredis ainsi que le 13 de chaque mois, à minuit : 0 0 13 * 5 tâche
Journal des opérations
La tâche est une commande à exécuter. Si cette tâche écrit sur sa sortie standard ou son erreur standard, alors le daemon crond les envoie par courriel à l’utilisateur correspondant (celui indiqué par le sixième paramètre).
Afin d’éviter que ces informations soient transmises par courriel, il est possible de les rediriger dans des fichiers. Par exemple :
mm hh jj MMM JJJ tâche > fichier-1 2> fichier-2
-
fichier-1
contiendra la sortie standard -
fichier-2
contiendra l’erreur standard
Ou pour accumuler les sortie et erreur standards dans un même fichier nommé journal.txt :
mm hh jj MMM JJJ tâche >> /mon/répertoire/journal.txt 2>&1
Raccourcis
Raccourcis |
Description |
Équivalent |
---|---|---|
|
Au démarrage |
Aucun |
|
Tous les ans |
|
|
Tous les ans |
|
|
Tous les mois |
|
|
Toutes les semaines |
|
|
Tous les jours |
|
|
Toutes les nuits |
|
|
Toutes les heures |
|
Exemples
Chacun des exemples enregistre l’espace disque libre (commande df) dans le fichier /tmp/df.log
à des horaires différents. Afin de conserver l’historique, ces exemples utilisent la redirection >>
qui permet d’ajouter les nouvelles données à la fin du fichier (si celui-ci existe déjà, dans le cas contraire il sera créé).
Tous les jours à 23 h 30 : 30 23 * * * df >> /tmp/df.log
Toutes les heures, passées de 5 minutes : 5 * * * * df >> /tmp/df.log
Tous les premiers du mois à 23 h 30 : 30 23 1 * * df >> /tmp/df.log
Tous les lundis à 22 h 28 : 28 22 * * 1 df >> /tmp/df.log
Tous les vendredis et tous les 13 à 11 h 22 : 22 11 13 * 5 df >> /tmp/df.log
Tous les vendredis 13 à 11 h 22 : 22 11 13 * * [ `date ‘+\%w’` -eq 5 ] && df >> /tmp/df.log
Du 2 au 5 de chaque mois à 10 h 12 : 12 10 2-5 * * df >> /tmp/df.log
Tous les jours pairs du mois à 23 h 59 : 59 23 */2 * * df >> /tmp/df.log
Tous les jours ouvrés à 22 heures : 0 22 * * 1-5 df >> /tmp/df.log
Toutes les 5 minutes : */5 * * * * df >> /tmp/df.log
Tous les derniers jours du mois (la barre oblique inversée devant % est obligatoire en édition de crontab, contrairement à l’exécution manuelle de la commande) :
0 0 28-31 * * [ `/bin/date +\%d` -gt `/bin/date +\%d -d « 1 day »` ] && df >> /tmp/df.log
-
Tous les derniers dimanches du mois :
-
Première solution : comparer tous les dimanches avec celui de la semaine d’après.
-
0 0 * * 0 [ `/bin/date +\%d` -gt `/bin/date +\%d -d "7 day"` ] && df >> /tmp/df.log
-
-
Deuxième solution : tester la dernière semaine tous les mois.
-
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
-
-
Troisième solution : lancer un script avec le calendrier.
-
0 0 21-31 * * /bin/script.sh
-
-
Quatrième solution, utiliser fcron.
-
-
Tous les premiers dimanches du mois :
-
Première solution : tester tous les dimanches5 :
-
0 0 * * 0 [ `date '+\%e'` -le 7 ] && df >> /tmp/df.log
-
-
Autre solution : le script avec calendrier :
-
0 0 1-7 * * /bin/script2.sh
Horodatage du fichier de sortie
Les exemples ci-dessus utilisent la redirection >>
afin de créer un journal sur plusieurs exécutions.
Afin, d’écrire dans des fichiers différents, il est possible d’utiliser la commande date
, comme avec l’exemple suivant :
30 23 * * * df > /tmp/df_`date +\%d_\%m_\%Y_\%H_\%M`.log
(le caractère ` (accent grave, U+0060) est produit par la combinaison des touches [Alt
]+[7] sur le clavier AZERTY en France)
Gr
Bien entendu, une autre solution est de réaliser l’écriture du fichier dans un script appelle-df.sh
:
#!/bin/sh JJ_MM_ANNEE_HH_MM=`date +\%d_\%m_\%Y_\%H_\%M` df > /tmp/df_${JJ_MM_ANNEE_HH_MM}.log
Et de remplacer la table cron précédente par : 30 23 * * * appelle-df.sh
Commandes utiles
Ces commandes ne fonctionnent pas pour toutes les distributions Linux et Unix.
Indique l’horaire de la dernière tâche exécutée pour l’ensemble des utilisateurs :
ls -lut /etc/init.d/cron
Extraie du journal du système les informations concernant la table cron :
grep -w cron /var/log/syslog
Relance le démon cron : /etc/init.d/cron force-reload