Comment utiliser Cron sous Linux : trucs, astuces et exemples
Votre guide ultime des tâches cron et crontab sous Linux. Des bases aux conseils avancés, apprenez tout ce dont vous avez besoin pour réussir votre planification.
Les tâches Cron sont un outil fondamental mais puissant au sein du système d'exploitation Linux. Ces planificateurs de tâches basés sur le temps sont indispensables aux administrateurs système, aux développeurs et aux passionnés de technologie, permettant l'automatisation des tâches de routine.
Cet article est conçu pour démystifier les tâches cron. Il propose un guide complet qui explique ce que sont les tâches cron, comment elles fonctionnent et, surtout, comment vous pouvez les utiliser pour automatiser des tâches répétitives sur votre système Linux.
Ainsi, que votre objectif soit de configurer des fichiers de sauvegarde automatique, d'exécuter des scripts à des moments précis ou d'automatiser vos projets personnels, cet article vous montrera comment les tâches cron rendent tout cela possible. Alors, plongeons-nous !
Qu’est-ce que Cron ?
Cron est un planificateur de tâches basé sur le temps dans les systèmes d'exploitation de type Unix, notamment Linux et macOS. Il permet aux utilisateurs de planifier des tâches (commandes ou scripts) pour qu'elles s'exécutent périodiquement à des heures, des dates ou des intervalles fixes.
Il est le plus souvent utilisé pour automatiser les tâches de maintenance ou d'administration du système, mais il peut être utilisé à toute fin nécessitant l'exécution régulière et planifiée de commandes.
Comment fonctionne Cron
Le composant principal en arrière-plan est le démon cron, nommé crond. Son travail principal consiste à vérifier les tâches planifiées et à les exécuter à l'heure spécifiée.
Le démon se réveille toutes les minutes pour vérifier les tâches dans les fichiers crontab ou la configuration basée sur le répertoire. Cela nous amène naturellement au prochain aspect critique de Cron qui sous-tend sa configuration opérationnelle : les fichiers et répertoires qu'il utilise.
Fichiers et répertoires Cron
Les fichiers Crontab sont au cœur du système de planification des tâches cron. « Crontab » signifie « table cron », car ces fichiers contiennent une liste de commandes à exécuter à des heures planifiées.
Chaque ligne d'un fichier crontab représente une tâche distincte et comprend des informations sur le moment où exécuter la tâche, suivies de la commande à exécuter.
Essentiellement, les fichiers crontab se déclinent en deux variétés : ceux appartenant à des utilisateurs individuels et le « /etc/crontab » à l'échelle du système. Vous trouverez ci-dessous les détails clés que vous devez connaître concernant les deux.
Mais avant cela, quelque chose d’important à clarifier. Les fichiers cron appartenant à des utilisateurs individuels ne sont pas conservés dans leurs répertoires personnels mais se trouvent plutôt dans le répertoire « /var/spool/cron ». Dans le même temps, les fichiers de tâches cron pour les services et applications système sont généralement placés dans le répertoire « /etc/cron.d ».
Crontabs utilisateur
Les crontabs utilisateur sont personnels à chaque utilisateur d'un système. Les utilisateurs peuvent disposer de leur fichier crontab pour planifier des tâches sous leur ID utilisateur.
Le principal avantage des crontabs utilisateur est qu'ils permettent aux utilisateurs individuels de gérer leurs plannings de travail sans nécessiter de privilèges administratifs.
Crontab à l'échelle du système
Contrairement aux fichiers crontab spécifiques à l'utilisateur, « /etc/crontab » est un fichier de configuration à l'échelle du système. Il suit un format légèrement différent des crontabs utilisateur en incluant un champ utilisateur qui spécifie le compte utilisateur sous lequel la commande doit être exécutée.
Cela permet aux administrateurs système de planifier l'exécution de tâches sous n'importe quel utilisateur sans modifier la crontab de cet utilisateur, ce qui permet une plus grande flexibilité dans la gestion des tâches entre différents comptes d'utilisateurs.
Généralement, le fichier « /etc/crontab » est généralement utilisé pour les tâches qui doivent être exécutées avec des privilèges administratifs ou qui sont essentielles au fonctionnement du système.
Un autre point important est que même si les utilisateurs peuvent modifier leurs entrées crontab, la crontab à l'échelle du système ne peut être modifiée directement que par un utilisateur root.
Les répertoires de Cron
En plus des fichiers crontab, la plupart des systèmes Linux incluent un ensemble de répertoires analysés par cron pour les tâches planifiées : "/etc/cron.daily", "/etc/cron.hourly", "/etc/cron.weekly" et "/etc/cron.monthly".
Ces répertoires permettent une planification plus simple des tâches qui doivent s'exécuter régulièrement sans spécifier d'heures exactes dans une crontab.
Les scripts et les fichiers exécutables placés dans ces répertoires sont exécutés respectivement une fois par jour, heure, semaine ou mois. L'heure exacte à laquelle les scripts de ces répertoires sont exécutés est déterminée par la configuration trouvée dans « /etc/crontab » ou par le fichier de configuration du démon, généralement situé dans « /etc/cron.d/ .”
Bases de la syntaxe Cron
Une tâche cron est définie par une ligne de texte dans un fichier Cron (crontab). Chaque ligne est constituée d'une série de champs séparés par des espaces ou des tabulations, suivis d'une commande ou d'un script à exécuter. La syntaxe de base d'une tâche cron est la suivante :
minute hour day_of_month month day_of_week command_to_execute
Examinons chaque composant :
Minutes (0-59)
Ce champ précise la minute à laquelle la commande sera exécutée. Il peut s'agir d'une valeur comprise entre 0 et 59. Par exemple, définir cette valeur sur 0 exécuterait la commande au début de l'heure.
Heure (0-23)
Le champ heure est spécifié au format 24 heures. Il détermine à quelle heure de la journée la commande est exécutée. Par exemple, définir cette valeur sur 14 exécuterait la commande à 14 heures.
Jour du mois (1-31)
Ce champ spécifie le jour du mois où la commande sera exécutée. Il peut s'agir de n'importe quelle valeur comprise entre 1 et 31, selon le nombre de jours du mois. Par exemple, définir cette valeur sur 1 exécuterait la commande le premier jour de chaque mois.
Mois (1-12)
Le champ Mois détermine le mois au cours duquel la commande sera exécutée. Il peut s'agir d'une valeur comprise entre 1 (janvier) et 12 (décembre). Par exemple, définir cette valeur sur 12 exécuterait la commande en décembre.
Jour de la semaine (0-6)
Ce champ spécifie le jour de la semaine où la commande doit être exécutée. Il peut s'agir d'une valeur comprise entre 0 (dimanche) et 6 (samedi). Par exemple, définir cette valeur sur 5 exécuterait la commande tous les vendredis.
Commande ou script
Enfin, le champ de commande ou de script est l'endroit où vous spécifiez l'action que la tâche cron doit effectuer. Il peut s'agir de n'importe quelle commande ou d'un chemin vers un fichier de script que le démon Cron exécutera à l'heure spécifiée.
Caractères spéciaux dans la syntaxe Cron
La syntaxe Cron prend également en charge les caractères spéciaux pour spécifier des modèles de planification plus complexes :
- Astérisque (*) : représente « chaque » unité de temps. Par exemple, « * » dans le champ des heures signifie « toutes les heures ».
- Virgule (,) : Permet de spécifier une liste de valeurs. Par exemple, « 1,3,5 » dans le champ day_of_week signifie « exécuter le lundi, le mercredi et le vendredi ».
- Trait d'union (-) : spécifie une plage de valeurs. Par exemple, « 9-17 » dans le champ des heures signifie « toutes les heures de 9 h à 17 h ».
- Slash (/) : spécifie les incréments. Par exemple, « */10 » dans le champ des minutes signifie « toutes les 10 minutes ».
En dehors de cela, les tâches cron ont des chaînes de raccourci spéciales qui peuvent remplacer les cinq champs d'heure et de date. Ces raccourcis offrent un moyen rapide de spécifier le même planning qui nécessiterait autrement une représentation numérique.
- @reboot
Exécute la commande spécifiée une fois au démarrage.
- @yearly,
@annually Les deux exécutent la tâche spécifiée chaque année à minuit le 1er janvier. Équivaut à spécifier « 0 0 1 1 * »
- @monthly
Exécute la tâche une fois par mois, le 1er, à minuit. Équivalent à « 0 0 1 * * »
- @weekly
Exécute la tâche une fois par semaine à minuit le dimanche. Équivalent à « 0 0 * * 0 »
- @daily,
@midnight Les deux exécutent la tâche cron tous les jours à minuit. Cela équivaut à spécifier « 0 0 * * * » dans le fichier crontab.
- @hourly
Exécute la tâche en début de chaque heure. Équivalent à « 0 * * * * »
Quand une tâche Cron démarre-t-elle ?
Le système cron vérifie crontab toutes les minutes. Il exécute des tâches lorsque l'heure définie (minutes, heures et mois) correspond à l'heure réelle. Il vérifie également le jour : si la date spécifique du mois ou le jour de la semaine correspond à aujourd’hui, alors il est temps d’exécuter la commande ou le script.
Tâches et chemins Cron
Lorsqu’une tâche cron s’exécute, elle le fait dans un environnement restreint, ce qui signifie qu’elle n’hérite pas automatiquement des variables ou chemins d’environnement de l’utilisateur ou du système. Cela peut entraîner des problèmes d'échec de la tâche cron, car elle ne parvient pas à trouver les exécutables ou les scripts nécessaires en raison d'un chemin non défini ou incorrect.
À la lumière de cela, vous pouvez définir explicitement la variable d'environnement PATH dans le fichier crontab pour gérer les chemins dans les tâches cron. Cela indique au démon cron où rechercher les exécutables. Par exemple:
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
L'ajout de cette ligne au début de votre fichier crontab garantit que toutes les tâches cron ci-dessous rechercheront les exécutables dans ces répertoires.
Cependant, compte tenu des meilleures pratiques, nous vous recommandons de toujours spécifier des chemins absolus vers tous les exécutables et scripts dans votre cron tâches pour éviter l'ambiguïté et les erreurs potentielles.
De plus, avant de vous fier à l'exécution automatisée, exécutez manuellement vos scripts ou commandes en utilisant les mêmes chemins et paramètres d'environnement définis dans votre crontab pour vous assurer qu'ils fonctionnent comme prévu.
Configuration et gestion des tâches Cron
Bon, laissons de côté la théorie maintenant. Vous disposez de toutes les connaissances essentielles sur le fonctionnement des tâches cron et leurs composants. Il est temps de passer à la partie passionnante : créer une tâche cron.
Créer la tâche Cron de l'utilisateur
Pour créer ou modifier le fichier crontab de votre utilisateur, utilisez la commande suivante dans le terminal :
crontab -e
Il s'agit du moyen standard permettant aux utilisateurs de créer et de modifier des tâches cron. Une fois exécuté, il modifie les tâches cron pour l'utilisateur qui exécute la commande en ouvrant le fichier crontab de votre utilisateur dans l'éditeur de texte par défaut défini pour votre système, tel que Vi, Nano ou autre.
Si c'est la première fois que vous utilisez la commande, vous serez peut-être invité à sélectionner un éditeur avant de continuer.
Ensuite, pour ajouter une tâche cron, ajoutez simplement une nouvelle ligne à votre fichier crontab en suivant la syntaxe expliquée ci-dessus. Par exemple, nous planifierons un script de sauvegarde, « backup.sh », situé dans le répertoire personnel de notre utilisateur, pour qu'il s'exécute quotidiennement à 3h00 du matin en ajoutant la ligne suivante :
0 3 * * * /home/linuxiac/backup.sh
De nombreuses lignes préfixées par le symbole « # » et donc commentées en début de fichier servent de guides concis pour la mise en place d'une tâche cron. Tapez le vôtre après eux, comme indiqué dans l'image ci-dessus.
Ensuite, enregistrez et quittez l'éditeur. N'oubliez pas que le service Cron vérifie automatiquement les modifications apportées aux fichiers crontab et les applique en conséquence, vous n'avez donc pas besoin de le redémarrer après avoir apporté des modifications.
En conclusion, il convient de noter que l'utilisation de crontab -e
offre l'avantage supplémentaire de vérifier automatiquement la syntaxe lorsque vous enregistrez et quittez le fichier. Cron vous alertera de toute erreur détectée, offrant ainsi une protection précieuse contre la saisie accidentelle de tâches cron non valides.
Créer une tâche Cron à l'échelle du système
Étant donné que crontab -e
se concentre sur les crontabs d'utilisateurs individuels, il n'est pas conçu pour les modifications de configuration Cron à l'échelle du système qui pourraient être nécessaires pour certaines tâches administratives.
Si tel est le cas, la modification directe du fichier « /etc/crontab » vous offre des fonctionnalités crontab à l'échelle du système. Contrairement aux crontabs spécifiques à l'utilisateur, ce fichier peut inclure des tâches à l'échelle du système et prend en charge la spécification de l'utilisateur pour chaque tâche, offrant ainsi une flexibilité pour exécuter des commandes sous différents comptes d'utilisateurs.
Par exemple, créons une tâche cron à l'échelle du système qui supprimera tous les fichiers avec l'extension « .log » du répertoire « /var/log/myservice » à 2 :00 AM.
Pour ce faire, nous ouvrons d'abord le fichier « /etc/crontab » avec notre éditeur de terminal préféré :
sudo vim /etc/crontab
Ensuite, nous entrons dans la tâche cron, qui ressemble à ceci :
0 2 * * * root /usr/bin/find /var/log/myservice -type f -name '*.log' -delete
Ce qui distingue cela des tâches cron des utilisateurs est l'inclusion d'une colonne supplémentaire après les cinq champs initiaux. Cette colonne permet de spécifier le compte utilisateur sous lequel le travail sera exécuté – dans ce cas, root.
Cependant, éditer directement le fichier « /etc/crontab » présente deux inconvénients principaux. Premièrement, cette approche ne permet pas de vérification de la syntaxe, ce qui augmente le risque d'erreurs.
La seconde raison est que « /etc/crontab » affecte l'ensemble du système ; des entrées incorrectes peuvent avoir des implications étendues, affectant potentiellement la stabilité ou la sécurité du système. Alors, utilisez-le avec prudence.
Liste des tâches Cron des utilisateurs
Pour vous assurer que vos tâches cron ont été correctement planifiées, vous pouvez afficher le contenu du fichier crontab de votre utilisateur en utilisant :
crontab -l
Cette commande répertorie toutes les tâches cron planifiées pour votre utilisateur, vous permettant de vérifier ou de revoir les tâches à exécuter.
Liste des tâches Cron à l'échelle du système
Comme nous le savons déjà, les tâches cron à l'échelle du système sont stockées à différents emplacements et ne sont pas répertoriées dans la crontab de l'utilisateur. Pour répertorier les tâches cron à l'échelle du système, vous devrez consulter le fichier « /etc/crontab » et les répertoires « /etc/cron.d/ », « /etc/cron.daily/», « /etc/cron.hourly/», « /etc/cron.weekly/», et « /etc/cron.monthly/ ».
Vous pouvez visualiser ces fichiers à l'aide de la commande cat
ou de n'importe quel éditeur de texte. Par exemple:
sudo cat /etc/crontab
Pour répertorier le contenu des répertoires, par exemple « /etc/cron.daily », utilisez :
ls /etc/cron.daily/
Liste des tâches Cron pour d'autres utilisateurs
Si vous disposez des privilèges de superutilisateur (root), vous pouvez répertorier les tâches cron pour n'importe quel utilisateur du système en utilisant la commande crontab avec l'option « -u » suivie du nom d'utilisateur et du « - l'option. Par exemple, pour répertorier les tâches cron pour un utilisateur nommé « bobby », vous exécuterez :
sudo crontab -u bobby -l
Cette commande est pratique pour les administrateurs système qui gèrent les tâches cron sur plusieurs comptes d'utilisateurs.
Modification des tâches Cron
Pour modifier une tâche cron, de la même manière que pour la création, utilisez la commande suivante pour ouvrir le fichier crontab de l'utilisateur actuel dans l'éditeur par défaut :
crontab -e
Lorsque vous ouvrez le fichier crontab, accédez à la ligne contenant la tâche cron que vous souhaitez modifier et modifiez la planification ou la commande si nécessaire, puis enregistrez et quittez le fichier.
Si vous devez modifier le fichier crontab d'un autre utilisateur (en supposant que vous disposez des autorisations nécessaires), par exemple de l'utilisateur « bobby », utilisez :
sudo crontab -u bobby -e
Suppression du travail Cron
En fonction de votre objectif, vous disposez de plusieurs méthodes pour supprimer une tâche cron. Pour supprimer uniquement une tâche spécifique, utilisez la commande crontab -e
pour ouvrir le fichier crontab.
À partir de là, accédez à la ligne représentant le travail que vous souhaitez supprimer. Supprimez cette ligne en la supprimant entièrement. Dans le même temps, veillez à ce que toutes les autres lignes restent identiques. Après cela, enregistrez vos modifications et quittez l'éditeur.
Toutefois, si vous souhaitez supprimer toutes les tâches cron planifiées pour un utilisateur, vous pouvez supprimer le fichier crontab de l'utilisateur. Cette action effacera toutes les tâches planifiées, elle doit donc être effectuée avec prudence.
Ouvrez le terminal et entrez la commande ci-dessous :
crontab -r
Cela supprimera le fichier crontab de l'utilisateur actuel sans invite de confirmation, alors assurez-vous de vouloir continuer avant de l'exécuter.
Si vous préférez recevoir une invite de confirmation avant la suppression, utilisez la commande crontab -i
suivie de -r
. Cela demandera une confirmation avant de supprimer le fichier crontab.
Aide-mémoire Crontab
Le tableau ci-dessous présente brièvement les points clés évoqués ci-dessus concernant les principales options de la commande crontab.
- crontab -e
Modifiez le fichier crontab ou créez-en un s'il n'existe pas déjà.
- crontab -l
Lorsqu'elle est associée à des options supplémentaires, cette fonctionnalité permet de modifier ou d'afficher le fichier crontab d'un utilisateur, une capacité réservée exclusivement aux utilisateurs disposant de privilèges d'administrateur.
- crontab -r
Supprimez l'intégralité du fichier crontab.
- crontab -u user
Lorsqu'elle est associée à des options supplémentaires, cette fonctionnalité permet la modification ou l'affichage du fichier crontab d'un utilisateur, une fonctionnalité réservée exclusivement aux utilisateurs disposant de privilèges d'administrateur.
Comment dépanner les tâches Cron
Malheureusement, lorsqu'une tâche cron ne s'exécute pas, cela peut être frustrant et potentiellement problématique, selon la tâche. Voici donc quelques lignes directrices de base pour rechercher la cause de ce problème.
La première étape du dépannage consiste à s’assurer que la tâche cron est correctement définie. Vérifiez que chaque champ est correctement spécifié en fonction de vos besoins. Une erreur courante est une syntaxe incorrecte ou une mauvaise compréhension de la manière dont cron interprète les caractères spéciaux et les plages.
Ensuite, assurez-vous que le démon Cron est en cours d'exécution sur votre système. Vous pouvez vérifier cela en exécutant une commande telle que :
sudo systemctl status cron
Assurez-vous que le script ou la commande que votre tâche cron tente d'exécuter dispose des autorisations appropriées et que vous utilisez des chemins absolus. Les tâches Cron s'exécutent dans un environnement limité avec une définition PATH minimale, il est donc crucial de spécifier le chemin complet d'une commande ou d'un script.
De plus, le fichier doit être exécutable et accessible à l'utilisateur sous lequel la tâche cron est planifiée. Essayez d'exécuter la commande ou le script manuellement à partir de la ligne de commande en utilisant le même compte utilisateur que celui utilisé par la tâche cron.
Cela peut vous aider à vérifier que la commande fonctionne comme prévu sans l'environnement cron. Si la commande échoue, vous saurez que le problème vient de la commande ou du script plutôt que de cron.
N'oubliez pas que les tâches cron s'exécutent dans un environnement shell non interactif et sans connexion, ce qui signifie qu'elles peuvent ne pas avoir accès aux mêmes variables d'environnement que lorsque vous exécutez des commandes manuellement.
Si votre script repose sur des variables d'environnement, vous devrez peut-être les définir explicitement au début de votre script ou dans la définition de la tâche cron.
Exemples de tâches Cron
Enfin, nous présenterons plusieurs exemples de tâches cron qui couvrent presque toutes les situations potentielles de syntaxe Cron. Considérez-les comme une base pour créer le vôtre.
- * * * * *
Exécutez la tâche cron toutes les minutes.
- 0 * * * *
Exécutez la tâche cron toutes les heures.
- 0 0 * * *
Exécutez la tâche cron tous les jours à minuit.
- 0 2 * * *
Exécutez la tâche cron à 2 heures du matin tous les jours.
- 0 0 15 * *
Exécutez la tâche cron tous les 15 du mois à minuit.
- 0 0 * * 6
Exécutez la tâche cron tous les samedis à minuit.
- 0 15 * * 1-5
Exécutez la tâche cron à 15 heures tous les jours du lundi au vendredi.
- */5 * * * *
Exécutez la tâche cron toutes les 5 minutes.
- 0 8-16 * * *
Exécutez la tâche cron quotidiennement, toutes les heures, ponctuellement, de 8 h 00 à 16 h 00.
- 0 4 * * 2,4
Exécutez la tâche cron à 4 heures du matin les mardi et jeudi.
- @reboot
Exécutez la tâche cron au démarrage du système.
De plus, des outils en ligne tels que celui-ci, celui-ci ou celui-ci offrent des interfaces Web robustes pour la configuration des tâches cron.
Meilleures pratiques et conseils
- Testez vos scripts manuellement avant de les planifier avec Cron pour vous assurer qu'ils fonctionnent comme prévu.
- Utilisez des chemins absolus pour les commandes et les scripts dans le fichier crontab afin d'éviter les problèmes de chemin.
- Rediriger la sortie vers un fichier ou un courrier électronique pour capturer toute sortie ou erreur à des fins de dépannage (« commande > /path/to/logfile 2>&1 »). De cette façon, vous pouvez consulter le fichier journal pour tout problème.
- Soyez attentif à la charge du système lorsque vous planifiez des tâches, en particulier si elles sont gourmandes en ressources ou si vous avez plusieurs tâches planifiées à peu près au même moment.
Conclusion
Les tâches Cron sont essentielles à l'administration du système Linux. Ils offrent un outil robuste et polyvalent pour planifier et automatiser les tâches.
Sa beauté réside dans sa polyvalence et sa précision. Des commandes simples exécutées à intervalles d'une minute aux scripts complexes programmés à des dates et heures spécifiques, cron s'adapte à de nombreuses exigences.
Avec des fichiers crontab utilisateur et système ainsi que des répertoires désignés pour les tâches périodiques, les tâches cron offrent aux utilisateurs individuels et aux administrateurs système la flexibilité d'adapter la planification des tâches à leurs besoins spécifiques.
En tirant parti des informations et des exemples de cet article, vous êtes sur la bonne voie pour réussir votre planification, améliorer votre productivité et ouvrir de nouvelles possibilités dans votre parcours Linux.
Pour plus de détails, les pages de manuel cron et crontab contiennent des informations et des explications détaillées sur le fonctionnement du système cron.
Merci pour votre temps ! Vos retours et commentaires sont, comme toujours, les bienvenus.