Remarque :

Utilisation de l'utilitaire Crontab pour planifier des tâches sur Oracle Linux

Avant de commencer

Ce tutoriel vous explique comment utiliser la commande crontab sur Oracle Linux. Ce tutoriel s'adresse aux utilisateurs d'Oracle Linux 8, mais les commandes sont également disponibles sur les autres versions d'Oracle Linux.

Contexte

Oracle Linux peut exécuter des programmes automatiquement en tant que tâches ou travaux programmés. Vous pouvez programmer l'exécution de programmes en tant que tâches au niveau du système en modifiant la configuration cron dans /etc/cron* ; vous pouvez également planifier l'exécution de programmes en tant que tâches dans votre crontab utilisateur. Si vous ne disposez pas d'un accès administrateur système sur un système ou si les programmes que vous souhaitez planifier sont spécifiques à votre compte utilisateur, l'utilitaire crontab fournit un mécanisme approprié pour exécuter les programmes selon un planning régulier sous vos propres informations d'identification utilisateur. La table crontab vous permet de planifier l'exécution des tâches aussi souvent que toutes les minutes ou aussi rarement qu'une fois par an ; toutefois, vous devez noter que la tâche cron ne s'exécutera pas si le système est arrêté pendant l'exécution planifiée de la tâche.

Ce tutoriel est destiné aux utilisateurs d'Oracle Linux 8, mais crontab est également disponible pour Oracle Linux 7 et le contenu de ce tutoriel doit également s'appliquer à cette plate-forme. Notez que la configuration cron est standard sur la plupart des systèmes Linux et qu'elle est disponible pour les systèmes de type Unix depuis 1975. Des solutions de planification plus complexes sont incluses dans Systemd sous la forme de minuteries et les utilisateurs sont encouragés à explorer les minuteries Systemd plus en profondeur pour répondre à des exigences spécifiques. Toutefois, ce tutoriel propose une formation de base plus adaptée à l'utilisateur moyen.

De quoi avez-vous besoin ?

Objectifs

Dans ce tutoriel, vous apprenez à :

Répertorier le contenu de votre fichier crontab

Remarque : lorsque vous utilisez l'environnement d'exercices gratuits, reportez-vous à Notions de base d'Oracle Linux Lab pour obtenir des instructions de connexion et d'utilisation.

Utilisez la commande crontab -l pour répertorier le contenu de votre fichier crontab.

crontab -l

Si aucune entrée crontab n'existe pour l'utilisateur, le message suivant s'affiche :

no crontab for oracle

Création ou modification de crontab

  1. Utilisez la commande crontab –e pour ouvrir votre crontab dans l'éditeur par défaut :

    crontab -e
    

    L'éditeur par défaut d'Oracle Linux 8 est l'éditeur VIM.

  2. Ajoutez la ligne suivante à la fin du fichier pour créer un travail crontab qui exécute la commande echo toutes les minutes :

    * * * * * echo "Hello World"
    

    Dans Vim :

    • Vous pouvez accéder au bas du fichier en appuyant sur 'Maj-g'.
    • Appuyez sur la touche 'i' pour passer en mode d'insertion.
    • Entrez la ligne crontab.
    • Appuyez sur la touche Echap pour quitter le mode d'insertion.
    • Entrez ' :wq' pour écrire le fichier et l'éditeur.

    Cette étape installe le crontab et le rend actif immédiatement :

    crontab: installing new crontab
    
  3. Répertoriez les entrées de votre crontab pour afficher la nouvelle entrée :

    crontab -l
    

Chaque tâche apparaît sur sa propre ligne dans crontab. La table crontab contient 5 champs séparés par des espaces qui définissent les différentes périodes pouvant être configurées, suivies de la commande exécutée pour le travail. La commande peut être équivalente à n'importe quelle commande que vous pouvez exécuter sur la ligne de commande sur le système, ce qui vous permet d'exécuter vos propres scripts ou de tirer parti des opérateurs de canaux et de redirection.

Vérifier la sortie de l'entrée cron

Par défaut, aucun agent de transport de courrier (MTA) n'est installé sur un système Oracle Linux minimal ou sur une image de plate-forme Oracle Linux. Lorsqu'aucune MTA n'est trouvée, le démon cron dirige la sortie des commandes spécifiées dans crontab vers le démon Syslog. Lors d'une nouvelle installation d'Oracle Linux 8, vous pouvez afficher la sortie crontab dans le fichier journal à l'adresse /var/log/cron.

Exécutez la commande suivante pour afficher la sortie générée par votre nouvelle entrée crontab :

sudo tail /var/log/cron

Notez que la tâche cron s'exécute uniquement toutes les minutes. Vous devrez donc peut-être attendre une minute avant d'exécuter la commande. La sortie de cette entrée CRON doit se présenter comme suit :

Jun 30 12:39:02 ol8-server CROND[68564]: (oracle) CMD (echo "Hello World")
Jun 30 12:39:02 ol8-server CROND[68551]: (oracle) CMDOUT (Hello World)

Cette sortie indique à l'utilisateur que la commande est exécutée, la commande qui a été exécutée, puis la sortie de la commande.

Si un MTA, tel que postfix ou sendmail est installé, cron dirige la sortie de l'entrée crontab vers le spool de messagerie de l'utilisateur sous lequel l'entrée crontab s'exécute. Nous verrons cela plus loin dans ce tutoriel.

Options de séquence temporelle Crontab

Les champs d'heure Crontab sont définis dans l'ordre suivant :

Les caractères spéciaux peuvent être utilisés dans n'importe quel champ de temps :

Le crontab vous permet également d'utiliser une extension abrégée spéciale pour remplacer les champs de temps pour les exigences générales en matière de temps. Fait important, cette arborescence inclut également une option permettant d'exécuter une commande après la réinitialisation :

Notez que crontab ne fournit qu'une granularité de 1 minute. Il n'est pas aisé de définir une entrée crontab qui s'exécute plus fréquemment que toutes les minutes. Si vous recherchez un outil capable de gérer ce problème, envisagez de rechercher des unités de minuterie Systemd.

Modifiez le crontab pour essayer différentes commandes en cours d'exécution à différentes séquences d'heures

  1. Utilisez la commande crontab –e pour ouvrir votre crontab dans l'éditeur par défaut :

    crontab -e
    
  2. Ajoutez les entrées suivantes au crontab :

    */15 * * * * echo "This crontab entry runs every 15 minutes"
    10 * * * * echo "This crontab entry runs at 10 minutes past every hour"
    30 13 * * 3 echo "This crontab entry runs at 13h30 on every Wednesday"
    @reboot echo "This command runs once after a reboot event"
    
  3. Enregistrez le fichier crontab et fermez.

Syntaxe de la commande Crontab

La commande crontab s'exécute sous les informations d'identification de l'utilisateur auquel crontab appartient et s'exécute avec certaines variables d'environnement par défaut définies, notamment :

Vous pouvez définir d'autres variables d'environnement en les spécifiant sous forme de lignes dans crontab qui n'incluent pas de champs d'heure, par exemple si vous préférez utiliser le shell bash et que vous souhaitez importer régulièrement toutes les variables et paramètres avec votre configuration .bashrc personnelle, vous pouvez modifier crontab comme suit :

SHELL=/bin/bash
* * * * * source $HOME/.bashrc;

La commande exécutée pour un travail crontab étant exécutée dans un environnement shell, la syntaxe shell standard s'applique et peut être utilisée pour diriger ou rediriger la sortie. Par exemple, pour rediriger toutes les sorties vers /dev/null, en désactivant toute sortie envoyée par courriel pour le travail, utilisez les réacheminements de shell standard pour les sorties STDOUT et STDERR sur la commande :

* * * * * /path/to/command > /dev/null 2>&1

Vous pouvez également rediriger la sortie vers un fichier que vous pouvez utiliser pour suivre la sortie de commande à chaque exécution :

* * * * * /path/to/command >> $HOME/command.log

Modifiez votre crontab pour tester la syntaxe des commandes

  1. Ouvrez le crontab dans un éditeur à l'aide de la commande crontab -e.

  2. Ajoutez les entrées suivantes :

    */15 * * * * echo "This 'silent' crontab entry runs every 15 minutes but output is redirected to /dev/null" > /dev/null 2>&1
    * * * * * echo "The date and time is $(date +\%Y-\%m-\%d\ \%H:\%M:\%S)" >> $HOME/crontab.log
    

    Notez que les caractères % dans la commande date sont échappés car les caractères % sont transformés en caractères de nouvelle ligne par l'utilitaire crontab et toutes les données après le premier % sont envoyées à la commande en tant qu'entrée standard. Pour plus d'informations, reportez-vous à man 5 crontab.

  3. Enregistrez le fichier et fermez.

Dans une minute, un fichier crontab.log doit apparaître dans le répertoire $HOME. Vous pouvez afficher le contenu de ce fichier en exécutant :

tail $HOME/crontab.log

Accéder à la sortie crontab dans le spool de courrier local

Si une MTA est installée, toutes les sorties crontab sont envoyées par e-mail au spool du système de l'utilisateur, par défaut.

Remarque : Les instructions suivantes sont fournies à titre d'exemple uniquement et ne décrivent pas une configuration complète pour un agent de transfert de courrier (MTA). Les paramètres de configuration par défaut peuvent ne pas être adaptés à votre installation. Si vous activez le postfix sur un système, lisez également Oracle Linux : Installer le serveur de messagerie Postfix pour plus d'informations sur sa configuration correcte.

Pour que la gestion du courrier crontab fonctionne correctement, vous devez installer, configurer et activer un MTA correctement. Dans le cadre de cet exercice, vous pouvez simplement effectuer les étapes suivantes pour permettre au MTA postfix de gérer le courrier local :

  1. Installez le package postfix :

    sudo dnf install -y postfix
    
  2. Activez et démarrez le service de postfixe. La configuration par défaut active le postfix en tant que MTA de livraison locale uniquement :

    sudo systemctl enable --now postfix.service
    
  3. Redémarrez le service crond pour qu'il commence à utiliser le postfix MTA pour gérer la distribution du courrier :

    sudo systemctl restart crond.service
    

Si vous n'avez pas configuré crontab pour rediriger la sortie vers une autre adresse électronique ou pour supprimer la sortie de vos travaux cron, la sortie de chaque travail est automatiquement envoyée dans le spool de messagerie local pour l'utilisateur. Le spool de messagerie est généralement stocké sous la forme d'un fichier de messagerie unique accessible via /var/spool/mail/$USER. Si vous surveillez simplement l'activité récente, il est plus facile de personnaliser ce fichier pour voir le courrier tel qu'il est livré :

tail -f /var/spool/mail/$USER

Pour consulter la sortie de chaque travail cron dans une interface gérable, installez le package mailx et utilisez la commande mail pour afficher le contenu du spool de messagerie :

sudo dnf install -y mailx
mail

Le courrier est répertorié de la manière suivante :

Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/oracle": 1 messages 1 new
>N  1 (Cron Daemon)         Wed Aug  5 23:48  30/1436  "Cron oracle
&

Saisissez le numéro du message à afficher. Par exemple, entrez 1 pour afficher le premier message de la file d'attente :

& 1
Hello World

Utilisez la commande header pour revenir à la liste des en-têtes de messagerie ou utilisez la commande quit pour quitter l'application.

Vous pouvez modifier l'adresse e-mail utilisée pour envoyer la sortie cron en définissant la variable d'environnement MAILTO dans votre crontab, mais votre système doit être configuré pour gérer la distribution de courrier externe. Si vous définissez l'environnement MAILTO sur une valeur vide, la sortie est ignorée et aucun courrier n'est envoyé pour une tâche cron dans crontab.

Supprimer l'intégralité du fichier crontab

Utilisez la commande crontab -r pour supprimer l'intégralité de crontab d'un utilisateur.

crontab -r

Cette commande supprime toutes les entrées de travail cron que vous avez indiquées pour votre utilisateur. Si vous souhaitez uniquement supprimer une entrée de travail spécifique, utilisez crontab -e pour modifier crontab et enlever la ligne du travail à enlever.

Démonstration vidéo

Une démonstration vidéo est disponible à l'adresse https://www.youtube.com/watch?v=BpPGoRYTv9I si vous avez besoin d'informations supplémentaires sur l'utilisation de l'utilitaire crontab sur Oracle Linux 8.

Utilitaire Cron d'automatisation des tâches d'Oracle Linux 8

Plus d'informations

Ressources de formation supplémentaires

Explorez d'autres exercices sur docs.oracle.com/learn ou accédez à davantage de contenu d'apprentissage gratuit sur le canal Oracle Learning YouTube. De plus, visitez le site education.oracle.com/learning-explorer pour devenir Oracle Learning Explorer.

Pour consulter la documentation du produit, consultez le centre d'aide Oracle.