Le guide du débutant sur l'utilisation de Cron sous Linux

Cron est une simple application UNIX qui gère et planifie l’exécution de commandes sur votre ordinateur. Elle a été développée pour la première fois en 1987 par Paul Vixie et est devenue depuis un outil inestimable dans les systèmes d’exploitation basés sur Linux, tant pour les administrateurs que pour les utilisateurs.
De nos jours, il existe plusieurs implémentations et réécritures de cron que vous pouvez facilement installer sur votre système Linux. Malgré les différences, ces programmes partagent tous la même lignée de Vixie Cron.
Ainsi, cet article vise à fournir un aperçu de base sur le fonctionnement de l’original Vixie cron, sa syntaxe, et comment vous pouvez l’utiliser pour planifier des tâches dans votre système Linux.
Table des matières
- Comment fonctionne Cron ?
- Crontab : Le cœur de Cron
- Crontabs système
- Revue de l’activité cron
- Questions fréquentes
À lire aussi : Comment créer facilement des travaux Cron sous Linux avec Zeit
Comment fonctionne Cron ?
Cron est une application UNIX incroyablement simple. Elle fonctionne en deux parties. Cron s’exécute d’abord en tant que processus en arrière-plan qui démarre lorsque vous allumez votre système.
À partir de là, elle lit un fichier spécifique chaque minute. Ce fichier contient une liste de commandes qui, à leur tour, se compose d’un code horaire et d’un chemin de fichier pour chaque script ou programme que vous souhaitez exécuter.

Cette approche permet à cron d’être très flexible dans les grands systèmes. Par exemple, des implémentations modernes de cron comme Cronie n’exécutent qu’une seule instance de cron même si cette machine héberge plusieurs utilisateurs.

Cronie rend cela possible en fournissant des crontabs locaux pour chaque utilisateur installé dans le système. Ainsi, cron n’a besoin de connaître que le propriétaire du crontab, le niveau d’autorisation de cet utilisateur et les commandes à l’intérieur du crontab.
Cela rend non seulement le système plus efficace, mais également plus sécurisé en réduisant le nombre de programmes privilégiés exécutés en mémoire.
Crontab : Le cœur de Cron
Chaque implémentation de cron utilise une forme de crontab. Il s’agit d’un simple fichier texte contenant toutes les commandes que cron exécutera pour cet utilisateur particulier. Comme décrit ci-dessus, chaque utilisateur du système a son propre crontab. Il peut le consulter en exécutant la commande suivante :
crontab -l
Cela affichera le contenu du crontab de l’utilisateur courant à la sortie standard. Cela peut être extrêmement utile si vous souhaitez simplement voir rapidement quelles commandes cron s’exécutent pour cet utilisateur.
Pour l’éditer, vous devrez exécuter la commande :
crontab -eCela indiquera à cron d’exécuter votre éditeur de texte par défaut et de charger le fichier crontab à l’intérieur. Cela vous permettra d’éditer le fichier crontab.

À lire aussi : Comment utiliser les timers Systemd comme remplacement de Cron
La syntaxe de Crontab
La syntaxe du fichier crontab est incroyablement simple. Une seule ligne dans ce fichier indiquera une commande correspondante qui doit être exécutée pour cet utilisateur particulier. La forme générale d’une commande crontab ressemble à ceci :
m h d mon dow [flags]commandeLe champ de l’intervalle de temps est une série de cinq chiffres où vous pouvez indiquer à cron la fréquence à laquelle vous souhaitez exécuter une commande. C’est la fonctionnalité principale de toute implémentation de cron et elle vous permet d’être à la fois spécifique et flexible quant à la manière dont cron traite les tâches récurrentes.
- m = minute entre 0 et 59
- h = heure entre 0 et 23
- d = jour du mois entre 1 et 31
- mon = mois entre 1 et 12
- dow = jour de la semaine entre 0 et 6. Zéro est dimanche.
Le champ flags est un ensemble d’options qui modifient le comportement de cron pour une seule commande. Par exemple, vous pouvez inclure l’option -n pour empêcher cron d’envoyer des mails système.
Le champ commande est la commande que cron exécutera à des intervalles définis. Cela peut être soit un script shell que vous avez écrit, soit un chemin de programme avec des flags.

Sachant cela, vous pouvez utiliser tout cela ensemble dans une seule ligne crontab pour créer des intervalles de temps spécifiques pour vos tâches. Par exemple, je peux exécuter un script sur mon système Ubuntu chaque 24 juillet à 2h30 en écrivant la ligne crontab suivante :
302247*/home/$USER/myscript.sh
Remarque : Il est recommandé d’exécuter un job cron à des nombre de minutes “inhabituels” (11, 27, 34, etc.) pour éviter que différents jobs cron ne se chevauchent.
Codes courts
Crontab vous permet d’utiliser certains codes courts pour rendre vos entrées cron plus faciles à lire.
@reboot– Exécute une fois, au démarrage@yearly– Exécute une fois par an, “0 0 1 1 *”.@annually– identique à @yearly@monthly– Exécute une fois par mois, “0 0 1 ”@weekly– Exécute une fois par semaine, “0 0 0”@daily– Exécute une fois par jour, “0 0 *”@midnight– identique à @daily@hourly– Exécute une fois par heure, “0 ”
Par exemple :
@daily ramces /home/ramces/.scripts/file-backup.shLe code court @reboot vous permet de créer des scripts à exécuter au démarrage :
@reboot /home/ramces/.scripts/bootup.shCela peut être extrêmement utile si vous souhaitez créer un moyen d’assurer que les commandes s’exécutent dès que vous allumez la machine.
Remarque : En fonction de la configuration de votre système, le code court @reboot peut ou non fonctionner comme prévu dans votre système.
Crontabs système
Une autre fonctionnalité brillante de cron est qu’il peut gérer des tâches récurrentes à l’échelle du système, car vous pouvez également créer des fichiers crontab root. Cela peut être extrêmement utile si vous souhaitez automatiser la maintenance et les mises à jour du système.
Pour créer un crontab root, vous devez simplement utiliser sudo avec la commande, ou vous connecter à votre compte root :
sudo crontab -e
Le crontab système suit généralement le même format que le crontab de l’utilisateur. Cependant, une différence clé entre les deux est que le crontab root vous permet d’exécuter des commandes en tant que n’importe quel utilisateur dans le système :
m h d mon dow utilisateur [flags]"commande"Sachant cela, vous pouvez ensuite l’utiliser pour créer à la fois des commandes récurrentes au niveau utilisateur et root dans le même crontab :
302 sun root /bin/apt update
305* ramces /home/ramces/.scripts/file-backup.shAgir de cette manière me permet de préserver les permissions de mes fichiers tout en ayant un seul endroit où je peux modifier les commandes que je souhaite exécuter.

À lire aussi : Pourquoi et comment éditer votre fichier sudoers sous Linux
Édition des entrées cron en tant qu’autre utilisateur
Si au lieu d’éditer le crontab en tant qu’utilisateur root, vous souhaitez planifier un job cron en tant qu’autre utilisateur, c’est également possible avec le drapeau -u.
sudo crontab -u nom_utilisateur -ePar exemple, pour exécuter un job cron en tant qu’utilisateur “www-data”, utilisez la commande suivante :
sudo crontab -u www-data -eÀ lire aussi : Comment enregistrer la sortie du terminal dans un fichier sous Linux
Revue de l’activité cron
Bien que vous soyez maintenant prêt à exécuter des commandes ou des scripts spécifiques, vous pouvez vouloir vous assurer qu’ils ont été exécutés. Intégré à cron, une fois qu’une commande est exécutée, un email est envoyé au propriétaire du cron. Cela peut être modifié avec la variable “MAILTO”.

Ajouter [email protected] enverra tous les rapports de jobs cron à un email spécifié. Cette variable peut généralement être trouvée tout en haut de l’écran d’édition du crontab. Cependant, si elle n’est pas là, vous pouvez ajouter la variable, et cela fonctionnera comme prévu.
Plusieurs adresses email peuvent être séparées par une virgule. Si vous avez besoin qu’une commande différente soit envoyée ailleurs par email, vous pouvez ajouter la commande MAILTO directement au-dessus de la commande. Les commandes après ce mailto seront envoyées à la nouvelle adresse. Si vous laissez MAILTO= vide, les notifications seront envoyées au propriétaire de l’entrée cron.
Si vous ne souhaitez recevoir aucun email, vous pouvez également vérifier les journaux cron. Sur la plupart des systèmes, accéder aux journaux cron nécessitera des autorisations de superutilisateur. Le journal cron peut être trouvé sous “/var/log.” Le fichier cron ou syslog affichera le journal des entrées cron exécutées.
sudogrep crontab syslogQuestions fréquentes
Pourquoi ma commande cron s’exécute-t-elle chaque minute au lieu d’une fois par heure ?
C’est l’un des pièges les plus courants lors de la gestion des crontabs. Par défaut, l’ajout d’une valeur d’astérisque dans un code horaire signifie qu’elle s’exécutera pour chaque instance possible pour cette valeur. Par exemple, une valeur de 0 12 * * * indiquera à cron que vous souhaitez exécuter une commande une fois par jour à 12h00.
Cependant, la plupart des débutants écrivent souvent le même code horaire sous la forme * 12 * * *. L’écrire de cette manière signifie que la commande s’exécutera une fois par minute de 12h00 à 12h59. Ainsi, il est conseillé d’écrire 0 dans le champ des minutes pour s’assurer que la commande ne s’exécute qu’une seule fois.
Y a-t-il d’autres options que je peux utiliser avec cron ?
En plus des variables -n et MAILTO, vous pouvez également utiliser la commande -s pour dire au programme d’être strict dans l’exécution des commandes. L’utilisation de cette option obligera cron à se concentrer uniquement sur la commande actuelle jusqu’à ce qu’elle soit terminée. Cela peut être extrêmement utile si votre machine utilise un ensemble de commandes qui doivent s’exécuter dans un ordre spécifique.
Vous pouvez également utiliser la variable SHELL pour obliger cron à utiliser un shell différent pour ses commandes. Par exemple : SHELL=/bin/ksh
Crédit photo : Unsplash