Recherche de site Web

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


Cron est un utilitaire UNIX simple qui gère et planifie l'exécution des commandes sur votre ordinateur. Il a été développé pour la première fois en 1987 par Paul Vixie et est depuis devenu 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 un certain nombre d'implémentations et de 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 Vixie Cron.

En tant que tel, cet article vise à fournir un aperçu de base du fonctionnement du cron Vixie d'origine, de sa syntaxe et de la manière dont vous pouvez l'utiliser pour planifier des tâches sur votre système Linux.

Contenu

  • Comment fonctionne Cron ?
  • Crontab : le cœur de Cron
  • Crontabs système
  • Examen de l'activité cron
  • Questions fréquemment posées

Lire aussi : Comment créer facilement des tâches Cron sous Linux avec Zeit

Comment fonctionne Cron ?

Cron est un utilitaire UNIX incroyablement simple. Cela fonctionne en deux parties. Cron s'exécute d'abord en tant que processus en arrière-plan qui démarre lorsque vous démarrez votre système pour la première fois.

À partir de là, il lit ensuite un fichier spécifique toutes les minutes. Ce fichier contient une liste de commandes qui, à leur tour, consistent en un code temporel et 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, les implémentations cron modernes telles que 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. En tant que tel, cron a uniquement besoin de savoir à qui appartient la crontab, le niveau d'autorisation de cet utilisateur et les commandes contenues dans la 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 qui contient toutes les commandes que cron exécutera pour cet utilisateur particulier. Comme décrit ci-dessus, chaque utilisateur du système possède sa propre crontab. Ils peuvent visualiser en exécutant la commande suivante :

crontab -l

Cela imprimera le contenu de la crontab de l'utilisateur actuel sur la sortie standard. Cela peut être incroyablement utile si vous souhaitez simplement voir rapidement quelles commandes cron exécute pour cet utilisateur.

Pour le modifier, vous devrez exécuter la commande :

crontab -e

Cela indiquera à cron d'exécuter votre éditeur de texte par défaut et de charger le fichier crontab à l'intérieur. Cela vous permettra de modifier le fichier crontab.

Lire aussi : Comment utiliser les minuteries Systemd en remplacement de Cron

La syntaxe 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] command

L'intervalle de temps est un champ de cinq chiffres dans lequel vous pouvez indiquer à cron à quelle fréquence vous souhaitez exécuter une commande. Il s'agit de la fonctionnalité essentielle de toute implémentation de cron et elle vous permet d'être à la fois spécifique et flexible dans la façon 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 du courrier système.

Le champ commande correspond à la commande cron qui s'exécutera à des intervalles définis. Il peut s'agir soit d'un script shell que vous avez écrit, soit d'un chemin de programme avec des indicateurs.

Sachant cela, vous pouvez utiliser tous ces éléments 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 tous les 24 juillet à 2h30 du matin en écrivant la ligne crontab suivante :

30 2 24 7 * /home/$USER/myscript.sh

Remarque : Il est recommandé d'exécuter une tâche cron à un nombre de minutes « inhabituel » (11, 27, 34, etc.) pour éviter que différentes tâches cron ne se chevauchent.

Codes courts

Crontab vous permet d'utiliser certains codes courts pour faciliter la lecture de vos entrées cron.

  • @reboot - Exécuté une fois, au démarrage
  • @yearly - Exécuté une fois par an, « 0 0 1 1 * ».
  • @annually - identique à @yearly
  • @monthly - Exécuté une fois par mois, « 0 0 1 * * »
  • @weekly - Exécuté une fois par semaine, « 0 0 * * 0 »
  • @daily - Exécuté une fois par jour, « 0 0 * * * »
  • @minuit - identique à @daily
  • @hourly - Exécuté une fois par heure, « 0 * * * * »

Par exemple:

@daily ramces /home/ramces/.scripts/file-backup.sh

Le shortcode @reboot permet de créer des scripts à exécuter au démarrage :

@reboot /home/ramces/.scripts/bootup.sh

Cela peut être extrêmement utile si vous souhaitez créer un moyen de garantir que les commandes sont exécutées dès que vous allumez la machine.

Remarque : En fonction de la configuration de votre système, le shortcode @reboot peut ou non fonctionner comme prévu sur votre système.

Crontabs système

Une autre fonctionnalité intéressante 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 racine. Cela peut être extrêmement utile si vous souhaitez automatiser la maintenance et les mises à jour du système.

Pour créer une crontab root, il vous suffit d'utiliser sudo avec la commande, ou de vous connecter à votre compte root :

sudo crontab -e

La crontab du système suit en grande partie le même format que la crontab de l'utilisateur. Cependant, une différence clé entre les deux est que la crontab racine vous permet d'exécuter des commandes en tant qu'utilisateur du système :

m h d mon dow user [flags] "command"

Sachant cela, vous pouvez ensuite l'utiliser pour créer des commandes récurrentes au niveau de l'utilisateur et de la racine dans la même crontab :

30 2 * * sun root /bin/apt update
30 5 * * * ramces /home/ramces/.scripts/file-backup.sh

Procéder de cette façon me permet de conserver les autorisations de mes fichiers tout en disposant d'un seul endroit où je peux modifier les commandes que je souhaite exécuter.

Lire aussi : Pourquoi et comment modifier votre fichier Sudoers sous Linux

Modification des entrées cron en tant qu'autre utilisateur

Si au lieu de modifier la crontab en tant qu'utilisateur root, vous souhaitez planifier une tâche cron en tant qu'autre utilisateur, cela est également possible avec l'indicateur -u.

sudo crontab -u username -e

Par exemple, pour exécuter une tâche 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

Examen de l'activité cron

Bien que vous soyez désormais configuré pour exécuter des commandes ou des scripts spécifiques, vous souhaiterez peut-être vous assurer qu'il s'est exécuté. Intégré à cron, une fois qu'une commande est exécutée, elle enverra un e-mail au propriétaire du cron. Cela peut être modifié avec la variable « MAILTO ».

L'ajout de MAILTO=youremail@yourdomain.com enverra tous les rapports de tâches cron à une adresse e-mail spécifiée. Cette variable se trouve généralement tout en haut de l'écran d'édition de la crontab. Cependant, si elle n’y est pas, vous pouvez ajouter la variable et elle fonctionnera comme prévu.

Plusieurs adresses e-mail peuvent être séparées par une virgule. Si vous avez besoin d'une commande différente envoyée par e-mail ailleurs, vous pouvez ajouter la commande MAILTO directement au-dessus de la commande. Les commandes suivantes mailto seront envoyées par courrier électronique à 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 e-mail, vous pouvez également consulter les journaux cron. Sur la plupart des systèmes, l'accès aux journaux cron nécessitera des autorisations de superutilisateur. Le journal cron se trouve sous « /var/log ». Le fichier cron ou syslog affichera le journal des entrées cron exécutées.

sudo grep crontab syslog

Questions fréquemment posées

Pourquoi ma commande cron s'exécute-t-elle toutes les minutes 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 astérisque dans un code temporel signifie qu'il 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 avant 12h00.

Cependant, la plupart des débutants écrivent souvent le même code temporel que * 12 * * *. L'écrire de cette façon signifie que la commande s'exécutera une fois par minute de 12h00 à 12h59. En tant que tel, il est recommandé d’écrire 0 dans le champ des minutes pour s’assurer que la commande ne s’exécute qu’une seule fois.

Existe-t-il d’autres options que je peux utiliser avec cron ?

Outre les variables -n et MAILTO, vous pouvez également utiliser la commande -s pour indiquer au programme d'être strict dans l'exécution des commandes. L'utilisation de cette option forcera cron à se concentrer uniquement sur la commande en cours jusqu'à ce qu'elle se termine. Cela peut être extrêmement utile si votre ordinateur utilise un ensemble de commandes qui doivent être exécutées dans un ordre spécifique.

Vous pouvez également utiliser la variable SHELL pour que cron utilise un shell différent pour ses commandes. Par exemple : SHELL=/bin/ksh

Crédit image : Unsplash

Articles connexes