Planifier les tâches
1. cron
cron est le système de planication de tâches historique d’Unix.
Il permet d’automatiser l’exécution périodique de commandes, comme par exemple des sauvegardes, des mises à jour, l’envoi de rapports, etc.
cron est un daemon (c’est-à-dire un processus qui tourne en permanence) qui applique les règles définies dans des fichiers de description des planications. On appelle ces fichiers les crontab.
1.1. Format d’une crontab
La crontab est un tableau qui définit quand les tâches doivent se déclencher. Chaque ligne de la crontab représente une planification et suit la syntaxe :
* * * * * appel de la commande à exécuter
Les cinq premiers champs (représentés ci-dessus par des étoiles) définissent des contraintes sur le compteur des minutes (0-59), heures (0-23), jours du mois (1-31), mois (1-12) et jours de la semaine (1-7). La fin de la ligne exprime la commande à exécuter (avec éventuellement ses arguments).
.---------------- minute (0-59)
| .------------- heure (0-23)
| | .---------- jour du mois (1-31)
| | | .------- mois (1-12) ou jan,feb,mar,apr ...
| | | | .---- jour de la semaine (0-7) (dimanche=0 ou 7) ou sun,mon,tue,wed,thu,fri,sat
| | | | |
* * * * * user-name command to be executed
Par exemple :
9 * * * *
signifie que le déclenchement ne peut avoir lieu que si le compteur des minutes à l’instant t est à 9 (les étoiles signifient que le champ correspondant n’est pas discriminant). Donc au final, les déclenchements auront lieu à 1h 9min, 2h 9min, 3h 9min, etc.
Chaque nouvelle valeur ajoute une contrainte supplémentaire. Par exemple,
9 3 * * *
exprime un déclenchement à 3h 9min (tous les jours). Plus on ajoute de valeur, plus on réduit la fréquence. Par exemple,
9 3 1 * *
exprime un déclenchement à 3h 9min tous les premiers de chaque mois.
Lorsque le moment est venu (c’est-à-dire lorsque les champs minute, heure, etc. correspondent à la date actuelle), la commande se déclenche.
Les champs peuvent également définir des plages temporelles, sous les formes suivantes :
-
Plages de valeurs :
1-5(de 1 à 5),lun-ven(du lundi au vendredi) -
Listes de valeurs :
1,3,5(soit les valeurs 1, 3 et 5) -
Incréments :
*/10(toutes les multipes de 10)
Exemple :
*/10 * * * * ...
pour une exécution toutes les 10 minutes.
30 */6 * * * ...
pour une exécution toutes les six heures, à la demie.
1.2. Gérer une crontab
Chaque utilisateur possède sa crontab. Une crontab particulière est également dédiée aux tâches d’administration système. Une crontab s’édite avec la commande :
$ crontab -e
Cela ouvre un éditeur de texte où l’on peut ajouter, modifier ou supprimer des tâches planifiées.
Pour lister les tâches planifiées :
$ crontab -l
|
2. anacron
cron est bien adapté aux ordinateurs fonctionnant 24h/24, comme les serveurs.
Mais sur un poste de travail hors tension une partie du temps, rien ne garantit que les tâches vont s’exécuter.
Par exemple, une tâche planifiée pour minuit toutes les nuits ne sera jamais exécutée si l’ordinateur est éteint toutes les nuits.
Dans ce cas, mieux vaut utiliser anacron, qui est fait pour ça.
Pour chaque tâche, anacron vérifie qu’elle a été exécutée au cours des n derniers jours, où n correspond à la périodicité de cette tâche, et l’exécute si ce n’est pas le cas.
anacrontab
L’anacrontab est un tableau qui définit les fréquences auxquelles les tâches doivent se déclencher. Chaque ligne de la crontab représente une planification et suit la syntaxe :
périodicité délai identifiant_de_tâche commande
-
périodicitéindique la fréquence d’exécution d’une tâche en jours, ou bien@daily,@weeklyou@monthly -
délaiindique le nombre de minutes qu’attend anacron avant d’exécuter la tâche. -
identifiant_de_tâcheidentifie la tâche. -
la fin de la ligne exprime la commande à exécuter (avec éventuellement ses arguments).