Planifier des tâches cron sous Linux avec crontab

tuto planifier des tâches cron sous Linux avec crontab

Sur un système Linux, grâce à crontab, vous pouvez planifier l’exécution des tâches à des intervalles spécifiés, appelées « jobs Cron ». Dans ce tutoriel, nous allons explorer comment utiliser Crontab pour planifier des tâches Cron sous Linux.

Que ce soit sur un serveur Windows ou Linux, il est fréquent d’avoir à planifier des tâches pour automatiser certaines actions, notamment en dehors des heures ouvrées. Il peut s’agir de l’exécution d’une mise à jour système ou le lancement d’un script pour sauvegarder des données ou une base de données.

1. Qu’est-ce que le fichier crontab ?

Le fichier crontab est un fichier texte qui spécifie le calendrier des tâches Cron à exécuter en local sur la machine Linux. Il existe deux types de fichiers Crontab : les fichiers Crontab système et les fichiers Crontab des utilisateurs, ce qui influence le contexte d’exécution. Les fichiers Crontab des utilisateurs sont stockés à différents emplacements selon les distributions Linux.

Si nous prenons l’exemple de Debian et Ubuntu, ces fichiers sont stockés dans /var/spool/cron/crontabs. Au niveau du système, de façon globale, les fichiers crontab sont situés dans /etc/crontab et les scripts dans le répertoire /etc/cron.d.

Bien que vous puissiez modifier manuellement les fichiers Crontab, il est recommandé de passer par la commande crontab prévue à cet effet.

Nous allons maintenant passer à la syntaxe des fichiers Crontab pour comprendre comment spécifier correctement les horaires d’exécution des tâches.

2. La syntaxe de la crontab

Chaque ligne d’un fichier crontab correspond à une tâche planifiée et elle doit respecter une structure précise. En fait, chaque ligne contient six champs séparés par un espace, la dernière valeur étant la commande à exécuter. Ces champs représentent respectivement la minute, l’heure, le jour du mois, le mois, le jour de la semaine, et enfin la commande.

Voici un exemple de ligne Crontab typique :

<minute> <heure> <jour du mois> <mois> <jour de la semaine> <commande>
  • Le premier champ représente la minute (0-59).
  • Le deuxième champ représente l’heure (0-23).
  • Le troisième champ représente le jour du mois (1-31).
  • Le quatrième champ représente le mois (1-12).
  • Le cinquième champ représente le jour de la semaine (0-7, où dimanche = 0 ou 7).
  • Le dernier champ contient la commande à exécuter.

En jouant sur ces valeurs, il sera possible, par exemple, d’exécuter une action :

  • Toutes les 10 minutes
  • Tous les lundi de chaque semaine à 06:00
  • Tous les jours à 01:00
  • Toutes les deux heures, le samedi et le mercredi
  • Etc…

C’est un système très flexible. Vous devez aussi noter ce qui suit concernant les 5 premiers champs d’un job cron : ils peuvent contenir une ou plusieurs valeurs, séparées par des virgules, ou des plages de valeurs séparées par un tiret. L’astérisque est aussi une option.

Voici les opérateurs disponibles :

  • * : l’astérisque représente toutes les valeurs. Par exemple, si vous placez un astérisque sur le champ correspondant au jour de la semaine, cela signifie que la tâche s’exécutera tous les jours.
  • , : la virgule permet de spécifier une liste de valeurs, pour une exécution répétée. Si vous avez 7,23 dans le champ des heures, cela signifie que la tâche s’exécutera à 7h du matin et 23h du soir.
  • : le tiret permet de définir une plage de valeurs.
  • / : le slash permet de spécifier des intervalles de valeurs. Par exemple, le fait de préciser */15 dans le champ des minutes signifie que la tâche sera exécutée toutes les 15 minutes.

Voyons maintenant comment utiliser ces opérateurs et combinaisons dans des exemples concrets.

3. Les macros prédéfinies et les commandes Crontab

Il est très fréquent de planifier des tâches récurrentes par l’intermédiaire de la crontab. Plutôt que de devoir écrire les lignes complètes avec les 6 champs, les développeurs de Linux ont eu l’excellente idée de créer des macros prédéfinies.

Par exemple, la macro @daily permet d’exécuter une tâche tous les jours à minuit :

@daily commande

Voici une liste des macros disponibles :

  • @yearly pour exécuter la tâche une fois par an, à minuit, le 1er janvier.
  • @monthly pour exécuter la tâche une fois par mois à minuit, le 1er jour de chaque mois.
  • @weekly pour exécuter la tâche une fois par semaine, à minuit, chaque dimanche.
  • @daily pour exécuter la tâche tous les jours à minuit (00:00).
  • @reboot pour exécuter la tâche au démarrage du système.

4. Créer une tâche dans la crontab

La commande crontab permet non seulement de créer et de modifier des fichiers Crontab, mais aussi de les visualiser ou de les supprimer. Voici quelques commandes utiles :

  • crontab -e : ouvrir ou créer un fichier Crontab pour l’édition.
  • crontab -l : afficher le contenu du fichier Crontab.
  • crontab -r : supprimer le fichier Crontab actuel.

Explorons quelques exemples concrets de tâches Cron sur une machine Linux. Avant cela, vous devez ouvrir la crontab du système :

sudo crontab -e

Si vous ne précisez pas sudo, vous allez éditer la crontab de l’utilisateur avec lequel vous êtes actuellement connectés. La première fois, vous devez sélectionner l’éditeur de texte avec lequel éditer la crontab. Indiquez 1 pour choisir nano.

Ensuite, vous devez déclarer votre tâche cron à la suite du fichier, après tous les commentaires.

Exécuter une commande tous les jours de la semaine, sauf le samedi et le dimanche, à 06h00 :

0 06 * * 1-5 /chemin/vers/commande

Exécuter un script Bash toutes les 15 minutes et rediriger la sortie standard vers /dev/null :

*/15 * * * * /home/tutomaker/script.sh > /dev/null

Une fois la ligne ajoutée à la crontab, enregistrez avec le raccourci CTRL + O et fermez avec CTRL + X (si vous utilisez nano).

Pour vous familiariser avec le système de planification, je vous recommande d’utiliser ce site :

5. Conclusion

Grâce à la lecture de cet article de la boîte à tutoriels informatique, vous savez maintenant comment planifier et automatiser des tâches sous Linux en utilisant Crontab. Ceci est valable sur Debian, Ubuntu, Fedora, AlmaLinux, Rocky Linux et bien d’autres distributions Linux.

Que ce soit pour automatiser des tâches quotidiennes simples ou pour exécuter des scripts personnalisés, vous devez recourir à l’utilisation de la crontab. À moins que vous préfériez venir lancer la tâche manuellement à chaque fois que cela est nécessaire ? Je ne crois pas…

Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *