Aller au contenu principal

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.

  1. 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.

astuce

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
  1. À 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

  1. Pour exécuter une tâche tous les jours à minuit :
0 0 * * * commande
  1. Pour exécuter une tâche tous les lundis à 6h30 :
30 6 * * 1 commande
  1. Pour exécuter une tâche tous les jours à 14h30, 15h30, 16h30 et 17h30 :
30 14-17 * * * commande
  1. Pour exécuter une tâche toutes les 5 minutes :
*/5 * * * * commande
  1. Pour exécuter une tâche tous les premiers jours du mois à minuit :
0 0 1 * * commande
astuce

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


Qu'est-ce que le cron ?


Qu'est-ce qu'un job cron ?


Comment afficher la liste des jobs cron ?


Comment modifier votre crontab ?


Comment créer un job cron pour sauvegarder un dossier tous les jours à minuit ?


Que fait la ligne suivante dans le crontab : '0 23 * * * /home/user/update.sh' ?


Que fait la ligne suivante dans le crontab : '*/15 * * * * /home/user/refresh.sh' ?


Que fait la ligne suivante dans le crontab : '0 12 1 * * /home/user/monthly_update.sh' ?



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.

  1. Ouvrez votre crontab, pour pouvoir ajouter une ligne.
  2. À 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 fichier backup_tpDossier.tar.gz (à la racine de votre dossier personnel).
  3. Enregistrez et fermez votre fichier crontab.
  4. Vérifiez que le "job cron" a été bien pris en compte, en affichant la liste des "jobs cron".
  5. Attendez 5 minutes.
  6. Vérifiez que l'archive backup_tpDossier.tar.gz a été créée dans votre répertoire personnel.
Une solution