GNU/Linux >> Tutoriels Linux >  >> Linux

Cron Jobs et Crontab sur Linux expliqués

Ce tutoriel est un guide complet pour comprendre cron sous Linux ainsi que le rôle du fichier crontab.

En tant qu'administrateur système, il est très probable que vous passiez beaucoup de temps à effectuer des tâches récurrentes sur votre système .

Heureusement pour vous, il existe un moyen d'automatiser les tâches sur les systèmes Linux :tâches cron .

Initialement construit en 1975 par les laboratoires AT&T Bell, cron a évolué pour devenir une référence sur Linux en matière de planification et d'exécution de tâches à dates ou périodes fixes.

Dans le tutoriel d'aujourd'hui, nous allons jeter un œil au démon cron , tâches cron et la commande crontab sous Linux.

Nous soulignerons également la différence entre les tâches cron définies par l'utilisateur et les tâches cron définies par le système.

Prêt ?

Que sont Cron et les tâches Cron ?

Cron est un démon système exécuté sur n'importe quel système Linux qui est responsable de la détection des tâches cron et de leur exécution à des intervalles donnés.

Cron s'exécute toutes les minutes et inspecte un ensemble de répertoires prédéfinis sur votre système de fichiers pour voir si des tâches doivent être exécutées.

D'autre part, les tâches cron sont des tâches définies pour s'exécuter à des intervalles ou périodes donnés, généralement des scripts shell ou de simples commandes bash.

Les tâches cron sont généralement utilisées pour consigner certains événements dans vos utilitaires Syslog ou pour planifier des opérations de sauvegarde sur votre hôte (comme des sauvegardes de base de données ou des sauvegardes de système de fichiers).

Pour un système d'exploitation Linux exécutant systemd en tant que gestionnaire de services, vous pouvez inspecter le service cron en exécutant la commande suivante

$ sudo systemctl status cron.service

Remarque  :vous avez besoin des privilèges sudo pour inspecter les services système avec systemd

Qu'est-ce que la syntaxe de la tâche Cron ?

Le plus important à savoir sur cron est probablement la syntaxe de la tâche cron.

Afin de définir une tâche cron, vous allez définir :

  • Périodicité :c'est-à-dire quand votre travail va être exécuté dans le temps. Vous pouvez le définir pour qu'il s'exécute tous les premiers jours du mois, toutes les 5 minutes ou un jour très précis de l'année. Des exemples seront donnés plus loin dans l'article ;
  • Commande  :littéralement la commande à exécuter par l'utilitaire cron, il peut s'agir d'une commande de sauvegarde ou de n'importe quelle commande que vous exécuteriez normalement dans un shell ;
  • Utilisateur :ceci est réservé aux tâches cron définies par le système où vous souhaitez spécifier l'utilisateur qui doit exécuter la commande cron. Pour les tâches cron définies par l'utilisateur, vous n'avez pas besoin de spécifier d'utilisateur, et votre système les exécutera en tant que root par défaut.

Comme vous l'avez probablement remarqué, la colonne de périodicité est composée de 5 colonnes.

Chaque colonne peut être définie sur * , ce qui signifie que la commande sera exécutée pour chaque valeur de l'intervalle spécifié, ou jusqu'à une valeur particulière, par exemple le 6ème mois de l'année.

Si vous voulez exécuter une commande pour chaque minute, de chaque heure, de chaque jour du mois, de chaque mois , vous corrigeriez la commande suivante

* * * * *  logger "This is a command executed every minute"

Si vous souhaitez exécuter une commande toutes les 30 minutes , vous écririez

*/30 * * * * logger "This is executed every 30 minutes"

En revanche, si vous souhaitez exécuter une commande le premier jour du mois à minuit , vous écririez

0 0 1 * * logger "This is executed on the first day of the month, at midnight"

Lors de la définition de ces tâches cron, je n'ai pas eu à spécifier l'utilisateur qui les exécutait.

En effet, il existe une différence entre les tâches cron définies par l'utilisateur et les tâches cron définies par le système.

Tâches Cron définies par l'utilisateur

Les tâches cron définies par l'utilisateur sont des tâches cron définies par un utilisateur donné sur l'hôte. Cela ne signifie pas qu'il n'est pas capable d'exécuter des commandes affectant l'ensemble du système, mais ses tâches sont isolées sur des dossiers donnés sur l'hôte.

Chaque utilisateur peut avoir son propre ensemble de tâches cron sur un hôte Linux.

Liste des tâches cron définies par l'utilisateur

Lorsque vous êtes connecté à un utilisateur spécifique, exécutez cette commande pour voir les tâches cron appartenant à l'utilisateur

$ crontab -l

Si vous possédez des tâches cron, elles seront immédiatement affichées sur la sortie standard.

Par défaut, les tâches cron définies par l'utilisateur sont stockées dans le répertoire /var/spool/cron/crontabs mais vous devrez être root pour l'explorer.

Ajout de tâches cron définies par l'utilisateur

Afin de modifier les tâches cron liées à l'utilisateur auquel vous êtes connecté, exécutez la commande suivante

$ crontab -e

Par défaut, votre hébergeur ouvrira votre éditeur par défaut et vous pourrez activer vos tâches cron sur le système.

Ajouter une nouvelle ligne à la fin du fichier avec la ligne suivante par exemple

* * * * * logger "This is a log command from devconnected"

Logger est une commande qui permet aux utilisateurs d'écrire des messages personnalisés dans les journaux. Si vous avez besoin d'un guide complet sur la journalisation et Syslog, nous avons une description complète à ce sujet.

Vous n'avez pas besoin de spécifier un utilisateur car le système sait déjà que l'utilisateur définit cette commande.

De plus, la commande sera exécutée en tant qu'utilisateur actuel par défaut.

Vous n'avez pas à redémarrer les services, votre travail sera pris en compte lors de la prochaine occurrence.

Étant donné l'exemple que nous avons spécifié précédemment, inspectez vos journaux pour voir votre tâche cron exécutée

$ sudo journalctl -xfn

Comme vous pouvez le voir, le service cron a inspecté les répertoires spécifiques à l'utilisateur sur l'hôte (dans /var/spool/cron/crontabs ), il a ouvert une session en tant qu'utilisateur actuel, exécuté la commande et fermé la session.

Génial!

Vous avez appris comment définir des tâches cron définies par l'utilisateur sur votre hôte.

Suppression des tâches cron définies par l'utilisateur

Pour supprimer les tâches cron définies par l'utilisateur, utilisez la commande suivante

$ crontab -r
(or)
$ crontab -ri

Crontab sera supprimé pour votre utilisateur actuel (il ne supprimera pas les tâches cron définies par le système).

Exécutez une liste de tâches cron pour vérifier que toutes les tâches cron ont été supprimées

Tâches cron définies par le système

Les tâches cron définies par le système sont des tâches définies dans des répertoires partagés sur le système de fichiers.

Cela signifie que, étant donné que vous avez des privilèges sudo sur l'hôte, vous pourrez définir des tâches cron qui peuvent être modifiées par d'autres administrateurs sur votre système.

Les répertoires liés aux tâches cron définies par le système sont situés dans le répertoire etc et peuvent être vus en exécutant

$ ls -l | grep cron

Comme vous pouvez le constater, ce dossier contient de nombreux dossiers et fichiers différents :

  • anacrontab :un fichier utilisé par le service anacron sous Linux, qui sera expliqué dans l'une des sections suivantes.
  • cron.d :un répertoire contenant une liste de tâches cron à lire par le service cron. Les fichiers dans cron.d sont écrits selon la syntaxe cron que nous avons vue précédemment ;
  • cron.daily :un répertoire contenant une liste de scripts à exécuter quotidiennement par le système. Les fichiers sont différents des fichiers contenus dans le répertoire cron.d car ce sont de véritables scripts bash et non des tâches cron écrites avec la syntaxe cron ;
  • cron.hourly, cron.monthly, cron.weekly sont explicites, ils contiennent des scripts exécutés toutes les heures, tous les mois et toutes les semaines de l'année ;
  • crontab :un fichier cron écrit avec la syntaxe cron qui demande au service cron d'exécuter des tâches situées dans les dossiers quotidiens, horaires, mensuels et hebdomadaires. Il peut également définir des tâches personnalisées de la même manière que les tâches cron définies par l'utilisateur, sauf que vous devez spécifier l'utilisateur qui doit exécuter la commande.

Répertorier les tâches cron définies par le système

Comme vous l'avez probablement compris, les tâches cron définies dans les dossiers de configuration globale sont réparties sur plusieurs dossiers.

De plus, plusieurs fichiers cron peuvent être définis sur ces dossiers.

Cependant, en utilisant la ligne de commande, il existe un moyen efficace de concaténer tous les fichiers dans un répertoire donné.

Pour répertorier toutes les tâches cron définies dans cron.d, exécutez la commande suivante

$ cat /etc/cron.d/*

De même, pour répertorier les tâches cron définies dans le fichier crontab, exécutez la commande suivante

$ cat /etc/crontab

De même, vous pouvez inspecter quotidiennement tous les scripts qui vont être exécutés

ls -l /etc/cron.daily/

Ajout de tâches cron définies par le système

Comme vous l'avez probablement compris, il existe plusieurs façons d'ajouter des tâches cron définies par le système.

Vous pouvez créer un fichier cron dans cron.d, et le fichier sera inspecté toutes les minutes pour les modifications.

Vous pouvez également ajouter votre tâche cron directement au fichier crontab. Si vous souhaitez exécuter une tâche toutes les minutes ou toutes les heures, il est recommandé d'ajouter votre script directement dans les répertoires cron correspondants.

La seule différence avec les tâches cron définies par l'utilisateur est que vous devrez spécifier un utilisateur qui exécutera la commande cron.

Par exemple, créez un nouveau fichier dans le répertoire cron.d et ajoutez-y le contenu suivant (vous aurez évidemment besoin des privilèges sudo pour que les commandes s'exécutent)

$ sudo nano /etc/cron.d/custom-cron

*/1 * * * *    root    logger 'This is a cron from cron.d'

Encore une fois, vous n'avez pas besoin de redémarrer les services, le service cron inspectera votre fichier à la prochaine itération.

Pour voir votre tâche cron en action, exécutez la commande suivante

$ sudo journalctl -xfn 100 | grep logger

Voici ce que vous devriez voir sur votre écran

Génial !

Comme vous pouvez le voir, votre travail est maintenant exécuté toutes les minutes par l'utilisateur root sur votre hôte.

Maintenant que vous avez une idée complète de ce que sont les tâches cron définies par l'utilisateur et les tâches cron définies par le système, voyons le cycle de vie cron complet sur un hôte Linux.

Cycle complet de Cron sous Linux

Sans plus tarder, voici le cycle cron complet sur Linux.

C'est ce que fait votre service cron à chaque minute, ainsi que tous les répertoires inspectés.

Cron inspectera les tâches cron définies par l'utilisateur et exécutez-les si nécessaire.

Il inspectera également le crontab fichier où plusieurs tâches cron par défaut sont définies par défaut.

Ces tâches cron par défaut sont des scripts qui demandent à votre hôte de vérifier chaque minute, chaque heure, chaque jour et chaque semaine des dossiers spécifiques et d'exécuter les scripts qui s'y trouvent.

Enfin, le répertoire cron.d est inspecté . Le cron.d peut contenir des fichiers cron personnalisés et il contient également un fichier très important qui est le fichier anacron cron.

Fichier cron Anacron sous Linux

Le fichier anacron cron est un fichier exécuté toutes les demi-heures entre 7h00 et 23h00.

Le fichier anacron cron est chargé d'appeler le service anacron .

Le service anacron est un service responsable de l'exécution des tâches cron au cas où votre ordinateur n'aurait pas pu les exécuter en premier lieu.

Supposons que votre ordinateur soit éteint mais que vous ayez une tâche cron chargée d'exécuter des scripts de mise à jour chaque semaine.

Par conséquent, lorsque vous allumez votre ordinateur, au lieu d'attendre une semaine entière pour exécuter ces scripts de mise à jour, le service anacron détectera que vous n'étiez pas en mesure de lancer la mise à jour cron auparavant.

Anacron procédera ensuite à l'exécution de la tâche cron pour que votre système soit mis à jour.

Par défaut, le fichier anacron cron est chargé de vérifier que les répertoires cron.daily, cron.weekly, cron.hourly et cron.monthly ont été correctement appelés dans le passé.

Si anacron détecte que les tâches cron dans le dossier cron.monthly ne se sont pas exécutées, il sera chargé de les exécuter.

Conclusion

Aujourd'hui, vous avez appris comment cron et crontab fonctionnent sous Linux.

Vous avez également eu une introduction complète sur la syntaxe cron et comment définir vos propres scripts cron en tant qu'utilisateur sur votre hôte.

Enfin, vous avez eu un aperçu complet du cycle cron de la façon dont les choses fonctionnent sur votre hôte et de ce qu'est anacron.

Si vous êtes intéressé par l'administration système Linux, nous avons une section complète à ce sujet sur notre site Web. Cliquez sur l'image ci-dessous pour le vérifier.


Linux
  1. Comment utiliser cron sous Linux

  2. Comment automatiser des tâches sous Linux à l'aide de Crontab

  3. Commandes Linux :jobs, bg et fg

  4. Comment planifier des tâches Cron avec Crontab

  5. Linux :exécuter la tâche cron au premier plan

Comprendre Crontab sous Linux avec des exemples

Commande Linux crontab pour créer et gérer des tâches Cron

Comment exécuter et répertorier les tâches Cron pour un système Linux via PHP

Linux Crontab :15 exemples de tâches Cron impressionnants

Comment planifier des tâches avec Cron sous Linux

10 exemples cron utiles pour planifier des tâches sous Linux