Table des matières
Utilisation de Crontab
https://openclassrooms.com/courses/reprenez-le-controle-a-l-aide-de-linux/executer-un-programme-a-une-heure-differee
https://fr.wikipedia.org/wiki/Cron#crontab
http://hardware-libre.fr/2014/03/8-exemples-pour-maitriser-linux-cron
La « crontab », qu'est-ce que c'est ?
crontab est en fait une commande qui permet de lire et de modifier un fichier appelé la « crontab ».
Ce fichier contient la liste des programmes que vous souhaitez exécuter régulièrement, et à quelle heure vous souhaitez qu'ils soient exécutés.
crontab permet donc de changer la liste des programmes régulièrement exécutés. C'est toutefois le programme cron qui se charge d'exécuter ces programmes aux heures demandées. Ne confondez donc pas crontab et cron : le premier permet de modifier la liste des programmes à exécuter, le second les exécute.
Comment utilise-t-on crontab ?
Il y a trois paramètres différents à connaître, pas plus :
- -e : modifier la crontab ;
- -l : afficher la crontab actuelle ;
- -r : supprimer votre crontab. Attention, la suppression est immédiate et sans confirmation !
Afficher la crontab actuelle :
$ crontab -l no crontab for mateo21
Normalement, vous n'avez pas encore créé de crontab. Vous noterez qu'il y a une crontab par utilisateur. Là j'édite la crontab de mateo21 car je suis loggé avec l'utilisateur mateo21, mais root a aussi sa propre crontab. La preuve :
$ sudo crontab -l no crontab for root
Modifier la crontab
# crontab -e SHELL=/bin/sh PATH=/bin:/sbin:/usr/bin:/usr/sbin HOME=/var/log # #minute hour mday month wday command # # rotate log files every hour, if necessary 0 * * * * /usr/bin/newsyslog # send log file notifications, if necessary #1-59 * * * * /usr/bin/newsyslog -m # # do daily/weekly/monthly maintenance 30 1 * * * /bin/sh /etc/daily 30 3 * * 6 /bin/sh /etc/weekly 30 5 1 * * /bin/sh /etc/monthly #0 * * * * sleep $((RANDOM \% 1800)) && /usr/libexec/spamd-setup
Les champs
Le fichier ne contient qu'une seule ligne :
# m h dom mon dow command
Comme cette ligne est précédée d'un #, il s'agit d'un commentaire (qui sera donc ignoré).
Cette ligne vous donne quelques indications sur la syntaxe du fichier :
- m : minutes (0 - 59) ;
- h : heures (0 - 23) ;
- dom (day of month) : jour du mois (1 - 31) ;
- mon (month) : mois (1 - 12) ;
- dow (day of week) : jour de la semaine (0 - 6, 0 étant le dimanche) ;
- command : c'est la commande à exécuter.
Chaque ligne du fichier correspond à une commande que l'on veut voir exécutée régulièrement. Vous trouverez en figure suivante un schéma qui résume la syntaxe d'une ligne.
Les différentes notations possibles
Pour chaque champ, on a le droit à différentes notations :
- 5 (un nombre) : exécuté lorsque le champ prend la valeur 5 ;
- * : exécuté tout le temps (toutes les valeurs sont bonnes) ;
- 3,5,10 : exécuté lorsque le champ prend la valeur 3, 5 ou 10. Ne pas mettre d'espace après la virgule ;
- 3-7 : exécuté pour les valeurs 3 à 7 ;
- */3 : exécuté tous les multiples de 3 (par exemple à 0 h, 3 h, 6 h, 9 h…).
| Crontab | Signification |
|---|---|
| 47 * * * * commande | Toutes les heures à 47 minutes exactement. Donc à 00 h 47, 01 h 47, 02 h 47, etc. |
| 0 0 * * 1 commande | Tous les lundis à minuit (dans la nuit de dimanche à lundi). |
| 0 4 1 * * commande | Tous les premiers du mois à 4 h du matin. |
| 0 4 * 12 * commande | Tous les jours du mois de décembre à 4 h du matin. |
| 0 * 4 12 * commande | Toutes les heures les 4 décembre. |
| * * * * * commande | Toutes les minutes ! |
| 30 5 1-15 * * commande | À 5 h 30 du matin du 1er au 15 de chaque mois. |
| 0 0 * * 1,3,4 commande | À minuit le lundi, le mercredi et le jeudi. |
| 0 */2 * * * commande | Toutes les 2 heures (00 h 00, 02 h 00, 04 h 00…) |
| */10 * * * 1-5 commande | Toutes les 10 minutes du lundi au vendredi. |
