GERBELOTBARILLON.COM

Parce qu'il faut toujours un commencement...

La crontab

Pour automatiser des activités sous Linux on dispose d'un outil de planification qui s'appelle cron. Cet outil s'appuie sur une crontab dans laquelle sont listées les actions et les récurrences des différentes actions. Pour accéder à cette liste, faites simplement

crontab -e
.

Par exemple si nous souhaitons ajouter un job qui va s'exécuter tous les jours à 2h du matin : 0 2 * * * jobname. Les différents champs sont :

champvaleurs autorisées
minute0-59
heure0-23
jour du mois0-31
mois0-12 (ou les noms des mois)
jour de la semaine0-7 (0 ou 7 pour dimanche, ou les noms des jours)
Une '*' dans un champ symbolise 'premier-dernier' donc tous les jours, ou toutes les heures... Les intervalles de nombres sont permis quand deux nombres sont séparés par un tiret '-'.
L'intervalle inclut les bornes. Ainsi si nous avons 9-12 sur la colonne des heures cela signifiera que l'action s'effectuera à 9h, 10h, 11h et 12h.
Une liste peut également être utilisée en séparant les valeurs par des virgules comme "2,4,5,7" ou "8-12,14-18".
Un "/nombre" précise le pas à adopter pour parcourir l'intervalle comme "0-23/2" dans le champ heure demande une exécution toutes les heures paires. Une valeur de pas après un astérisque comme "*/2" peut symboliser "toutes les 2 heures".

A la place des 5 premiers champs on peut trouver une des huit chaînes suivantes :

chaînesignification
@rebootExécuter une fois au démarrage.
@yearly (ou @annually)Exécuter une fois par an, "0 0 1 1 *"
@monthlyExécuter une fois par mois "0 0 1 * *".
@weeklyExécuter une fois par semaine, "0 0 * * 0".
@daily (ou @midnight)Exécuter une fois par jour, "0 0 * * *".
@hourlyExécuter une fois par heure, "0 * * * *".

Pour afficher la liste des jobs,

crontab -l

Exemple de fichier cron :


 # 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