Le planificateur de tâches cron
Notions théoriques
cron
est un utilitaire Linux qui permet aux utilisateurs de planifier des tâches pour s'exécuter à des moments spécifiques. Ces tâches planifiées sont appelées des "jobs cron".
cron
est très utile pour automatiser des tâches répétitives, comme la sauvegarde de fichiers, la mise à jour du système, l'envoi de rapports par e-mail, etc.
Chaque utilisateur a son propre fichier crontab ("table cron") qui contient les instructions pour le daemon cron
sur l'exécution des tâches.
- Pour afficher ou modifier votre "table cron", utilisez la commande
crontab -e
. - Pour afficher la liste des "jobs cron", utilisez la commande
crontab -l
.
Exemple pratique
Comment créer une tâche pour sauvegarder notre dossier tpDossier
?
Imaginons que nous voulons créer un "job cron" pour sauvegarder notre dossier tpDossier
tous les jours à minuit. Pour ce faire, nous allons ajouter une entrée à notre crontab.
- Ouvrez votre crontab avec la commande
crontab -e
.
Si c’est la première fois que vous exécutez la commande crontab sous ce profil d’utilisateur, il va vous inviter à sélectionner un éditeur de texte par défaut à utiliser pour éditer votre crontab :
Output
no crontab for sammy - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
4. /bin/ed
Choose 1-4 [1]:
Entrez le numéro correspondant à l’éditeur de votre choix.
Nous vous conseillons de choisir l'éditeur de texte nano
.
Ensuite vous pourrez ajouter une ligne dans votre crontab :
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
- À la fin du fichier, ajoutez la ligne suivante :
0 0 * * * tar -czvf ~/backup_tpDossier.tar.gz ~/tpDossier
Cette ligne signifie que le "job cron" s'exécutera à 0 minute de 0 heure (minuit), chaque jour du mois, chaque mois, chaque jour de la semaine.
Comment préciser le moment d'exécution d'une tâche ?
Dans le crontab, chaque tâche est définie par une ligne qui spécifie quand la tâche doit être exécutée, suivie de la commande à exécuter.
Les 5 premiers champs de chaque ligne déterminent le moment d'exécution de la tâche, selon le format suivant :
min hour day month day [user] command > log
* * * * * command to be executed
- - - - -
| | | | |
| | | | +------- day of the week (0 - 6) (Sunday=0)
| | | +---------- month (1 - 12)
| | +-------------- day of the month (1 - 31)
| +---------------- hour (0 - 23)
+------------------ min (0 - 59)
- Le premier champ représente les minutes (0 - 59)
- Le deuxième champ représente les heures (0 - 23)
- Le troisième champ représente les jours du mois (1 - 31)
- Le quatrième champ représente les mois (1 - 12)
- Le cinquième champ représente les jours de la semaine (0 - 7) (dimanche=0 ou 7)
Exemples
- Pour exécuter une tâche tous les jours à minuit :
0 0 * * * commande
- Pour exécuter une tâche tous les lundis à 6h30 :
30 6 * * 1 commande
- Pour exécuter une tâche tous les jours à 14h30, 15h30, 16h30 et 17h30 :
30 14-17 * * * commande
- Pour exécuter une tâche toutes les 5 minutes :
*/5 * * * * commande
- Pour exécuter une tâche tous les premiers jours du mois à minuit :
0 0 1 * * commande
Vous pouvez utiliser :
- des virgules pour spécifier des valeurs distinctes (par exemple,
5,15,25,35,45,55 * * * * commande
pour exécuter une tâche toutes les 10 minutes), - et des tirets pour spécifier des plages de valeurs (par exemple,
0-30 * * * * commande
pour exécuter une tâche toutes les minutes pendant la première demi-heure de chaque heure).
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Objectif : Créer un "job cron" pour archiver et compresser le dossier tpDossier
toutes les 5 minutes.
- Ouvrez votre crontab, pour pouvoir ajouter une ligne.
- À la fin du fichier, ajoutez la ligne de commande qui permet de sauvegarder le dossier
tpDossier
(présent dans votre dossier personnel) toutes les 5 minutes, vers le fichierbackup_tpDossier.tar.gz
(à la racine de votre dossier personnel). - Enregistrez et fermez votre fichier crontab.
- Vérifiez que le "job cron" a été bien pris en compte, en affichant la liste des "jobs cron".
- Attendez 5 minutes.
- Vérifiez que l'archive
backup_tpDossier.tar.gz
a été créée dans votre répertoire personnel.
Une solution
Vous devez être connecté pour voir le contenu.