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 :
| champ | valeurs autorisées |
| minute | 0-59 |
| heure | 0-23 |
| jour du mois | 0-31 |
| mois | 0-12 (ou les noms des mois) |
| jour de la semaine | 0-7 (0 ou 7 pour dimanche, ou les noms des jours) |
A la place des 5 premiers champs on peut trouver une des huit chaînes suivantes :
| chaîne | signification |
| @reboot | Exécuter une fois au démarrage. |
| @yearly (ou @annually) | Exécuter une fois par an, "0 0 1 1 *" |
| @monthly | Exécuter une fois par mois "0 0 1 * *". |
| @weekly | Exécuter une fois par semaine, "0 0 * * 0". |
| @daily (ou @midnight) | Exécuter une fois par jour, "0 0 * * *". |
| @hourly | Exé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