Remarque :
- Ce tutoriel est disponible dans un environnement de laboratoire gratuit fourni par Oracle.
- Il utilise des exemples de valeur pour les informations d'identification, la location et les compartiments Oracle Cloud Infrastructure. A la fin de l'exercice, remplacez ces valeurs par celles propres à votre environnement cloud.
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 ?
- Un système sur lequel Oracle Linux est installé
Objectifs
Dans ce tutoriel, vous apprenez à :
- Liste du contenu d'un fichier crontab existant
- Création et modification d'entrées crontab
- Accéder à la sortie crontab
- Suppression de la table crontab complète pour un utilisateur
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
-
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.
-
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
-
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 :
- minute : de 0 à 59
- heure : de 0 à 23
- jour : de 1 à 31
- mois : de 1 à 12, ou nom du mois
- jour-de-la-semaine : de 0 à 7, ou nom abrégé du jour. Notez que 0 et 7 représentent tous les deux le dimanche.
Les caractères spéciaux peuvent être utilisés dans n'importe quel champ de temps :
- Astérisque (*) : indique que la commande doit être exécutée pour chaque instance du champ.
- Tiret (-) : Peut être utilisé pour indiquer une plage. Par exemple, dans le champ Jour de la semaine, vous pouvez indiquer entre 1 et 5 pour planifier l'exécution de la tâche du lundi au vendredi, mais pas le samedi ou le dimanche.
- Virgule (,) : permet de spécifier une liste de valeurs pour un champ. Par exemple, dans le champ d'heure, vous pouvez indiquer 6,18 pour planifier l'exécution de la tâche à 6 heures et 6 heures.
- Barre oblique (/) : peut être utilisée pour spécifier les valeurs d'étape. Par exemple, vous pouvez indiquer */15 dans le champ Minutes pour planifier l'exécution d'une tâche toutes les 15 minutes.
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 :
- @reboot : exécution une fois après la réinitialisation.
- @yearly : exécution une fois par an, à savoir "0 0 1 1 *".
- @annually : exécution une fois par an, à savoir "0 0 1 1 *".
- @monthly : exécution une fois par mois, à savoir "0 0 1 * *".
- @weekly : exécution une fois par semaine, à savoir "0 0 * * 0".
- @daily : exécution une fois par jour, à savoir "0 0 * * * *".
- @hourly : exécution une fois par heure, à savoir "0 * * * * *".
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
-
Utilisez la commande
crontab –e
pour ouvrir votre crontab dans l'éditeur par défaut :crontab -e
-
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"
-
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 :
- HOME : répertoire personnel de l'utilisateur que crontab exécute en tant que
- LOGNAME : Equivaut au nom de l'utilisateur que crontab exécute en tant que
- USER : nom d'utilisateur de l'utilisateur que crontab exécute en tant que
- SHELL : binaire shell utilisé pour exécuter des commandes. La valeur par défaut est
/bin/sh
. - PATH : chemin disponible pour l'utilitaire crontab. La valeur par défaut est
/usr/bin:/bin
.
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
-
Ouvrez le crontab dans un éditeur à l'aide de la commande
crontab -e
. -
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
. -
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 :
-
Installez le package postfix :
sudo dnf install -y postfix
-
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
-
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
man 5 crontab
man systemd.timer
- Oracle Linux : installation du serveur de messagerie Postfix
- Documentation Oracle Linux
- Bibliothèque Oracle Learning
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.
Use the Crontab Utility to Schedule Tasks on Oracle Linux
F49759-03
May 2022
Copyright © 2021, Oracle and/or its affiliates.