Remarque :
- Ce tutoriel est disponible dans un environnement d'atelier gratuit fourni par Oracle.
- Il utilise des exemples de valeur pour les informations d'identification Oracle Cloud Infrastructure, la location et les compartiments. A la fin de votre atelier, 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.
Contexte
Oracle Linux peut exécuter des programmes automatiquement en tant que tâches ou travaux programmés. Vous pouvez planifier l'exécution des programmes en tant que tâches système en modifiant la configuration cron dans /etc/cron*
ou planifier l'exécution des 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 que les programmes que vous souhaitez planifier sont propres à votre compte utilisateur, l'utilitaire crontab fournit un bon mécanisme pour exécuter les programmes selon une programmation régulière sous vos propres informations d'identification utilisateur. Le crontab vous permet de planifier l'exécution des travaux aussi souvent que chaque minute ou qu'une fois par an ; toutefois, vous devez noter que le travail cron ne s'exécutera pas si le système est en panne au cours de l'exécution planifiée du travail.
Notez que la configuration cron est standard sur la plupart des systèmes Linux et 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 temporisateurs et les utilisateurs sont encouragés à explorer les temporisateurs Systemd de manière plus approfondie pour résoudre des exigences spécifiques. Cependant, ce tutoriel fournit 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 allez découvrir comment :
- Liste du contenu d'un crontab existant
- Création et modification d'entrées crontab
- Accéder à la sortie crontab
- Suppression du crontab complet pour un utilisateur
Listez le contenu de votre fichier crontab
Remarque : lorsque vous utilisez l'environnement d'atelier gratuit, reportez-vous à Oracle Linux Lab Basics 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 votre 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 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 passer au bas du fichier en appuyant sur 'Maj-g'.
- Appuyez sur la touche "i" pour entrer en mode d'insertion.
- Entrez la ligne crontab.
- Appuyez sur la touche Esc pour quitter le mode d'insertion.
- Saisissez ' :wq' pour écrire le fichier et dans 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 le crontab. Le crontab comporte 5 champs séparés par des espaces qui définissent les différentes périodes pouvant être configurées, suivis de la commande exécutée pour le travail. La commande peut être équivalente à toute commande que vous pouvez exécuter sur la ligne de commande du système, ce qui vous permet d'exécuter vos propres scripts ou de tirer parti des canalisations et des opérateurs de redirection.
Vérifier la sortie de l'entrée cron
Aucun Mail Transport Agent (MTA) n'est installé sur un système Oracle Linux minimal ou sur une image de plate-forme Oracle Linux, par défaut. Lorsqu'aucun MTA n'est trouvé, le démon cron dirige la sortie des commandes spécifiées dans le crontab vers le démon Syslog. Lors d'une nouvelle installation d'Oracle Linux, 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 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 ol-server CROND[68564]: (oracle) CMD (echo "Hello World")
Jun 30 12:39:02 ol-server CROND[68551]: (oracle) CMDOUT (Hello World)
Cette sortie affiche l'utilisateur sous lequel la commande est exécutée, la commande 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 du courrier pour l'utilisateur sous lequel l'entrée crontab s'exécute. Cette procédure est décrite plus loin dans ce tutoriel.
Options de séquence temporelle Crontab
Les champs de temps 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 le dimanche.
Les caractères spéciaux peuvent être utilisés dans n'importe quel champ d'heure :
- 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 spécifier 1-5 pour planifier l'exécution de la tâche du lundi au vendredi, mais pas le samedi ou le dimanche.
- Virgule (,) : peut être utilisée pour spécifier une liste de valeurs pour un champ. Par exemple, dans le champ des heures, vous pouvez spécifier 6,18 pour planifier l'exécution de la tâche à 6 heures et 6 heures.
- Barre oblique (/) : permet de spécifier des 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 de temps générales. Fait important, cette abréviation inclut également une option permettant d'exécuter une commande après la réinitialisation :
- @reboot : s'exécute une fois après la réinitialisation.
- @yearly : Exécution une fois par an, c'est-à-dire "0 0 1 1 *".
- @annually : Exécution une fois par an, c'est-à-dire "0 0 1 1 *".
- @monthly : exécution une fois par mois, c'est-à-dire "0 0 1 * *".
- @weekly : exécution une fois par semaine, c'est-à-dire "0 0 * 0".
- @daily : exécution une fois par jour, c'est-à-dire "0 0 * * *".
- @hourly : exécution une fois par heure, à savoir "0 * * * *".
Notez que le crontab n'offre que 1 minute de granularité. Il n'est pas simple 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 consulter les unités d'horloge Systemd.
Modifiez le crontab pour essayer différentes commandes en cours d'exécution avec différentes séquences temporelles
-
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"
-
Enregistrer le fichier crontab et quitter.
Syntaxe de la commande Crontab
La commande crontab s'exécute sous les informations d'identification de l'utilisateur auquel appartient le crontab 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 comme
- 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 comme
- SHELL : binaire shell utilisé pour exécuter des commandes. Il est défini sur
/bin/sh
par défaut. - PATH : chemin disponible pour l'utilitaire crontab. Il est défini sur
/usr/bin:/bin
par défaut.
Vous pouvez définir d'autres variables d'environnement en les spécifiant sous forme de lignes dans le crontab qui n'incluent pas de champs temporels, 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 votre crontab comme suit :
SHELL=/bin/bash
* * * * * source $HOME/.bashrc;
Etant donné que l'exécution de la commande pour un travail crontab est exécutée dans un environnement shell, la syntaxe de shell standard s'applique et peut être utilisée pour canaliser ou rediriger la sortie. Par exemple, pour rediriger toutes les sorties vers /dev/null, en désactivant toute sortie envoyée pour le travail en conséquence, utilisez des réacheminements shell standard pour les sorties STDOUT et STDERR dans la commande :
* * * * * /path/to/command > /dev/null 2>&1
Vous pouvez également rediriger la sortie pour l'ajouter à un fichier que vous pouvez utiliser pour suivre la sortie de la commande à chaque exécution :
* * * * * /path/to/command >> $HOME/command.log
Modifiez votre crontab pour expérimenter la syntaxe de la commande.
-
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 % de la commande de date sont échappés car les caractères % sont transformés en caractères de ligne par l'utilitaire crontab et toutes les données après le premier % sont envoyées à la commande en entrée standard. Pour plus d'informations, reportez-vous à
man 5 crontab
. -
Enregistrez le fichier et fermez-vous.
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 un MTA est installé, toutes les sorties crontab sont envoyées par défaut au spool du courrier système de l'utilisateur.
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 valeurs par défaut de configuration peuvent ne pas être adaptées à votre installation. Si vous activez le postfixe sur un système, reportez-vous également à Oracle Linux : Install the Postfix Email Server pour plus d'informations sur sa configuration.
Pour que la gestion du courrier crontab fonctionne correctement, vous devez installer, configurer et activer correctement un MTA. Dans le cadre de cet exercice, vous pouvez simplement effectuer les étapes suivantes pour permettre à la 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 postfixe en tant que MTA de livraison locale uniquement :
sudo systemctl enable --now postfix.service
-
Redémarrez le service crond afin 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é votre 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 courrier local de l'utilisateur. Le spool du courrier est généralement stocké sous la forme d'un fichier de courrier unique accessible à l'adresse /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 du courrier :
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 la commande quit
pour quitter l'application.
Vous pouvez modifier l'adresse électronique utilisée pour envoyer la sortie Cron par courrier 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 supprimée et aucun courrier n'est envoyé pour une tâche cron dans le crontab.
Supprimer la totalité du crontab
Utilisez la commande crontab -r
pour supprimer la totalité du crontab d'un utilisateur.
crontab -r
Cette commande supprime toutes les entrées de travail cron que vous avez spécifiées pour votre utilisateur. Si vous souhaitez uniquement enlever une entrée de travail spécifique, utilisez crontab -e
pour modifier le crontab et enlever la ligne du travail à enlever.
Consultez man 5 crontab
et man systemd.timer
pour plus de détails sur ces fonctionnalités.
Démonstration vidéo
Une démonstration vidéo est fournie dans Oracle Linux Automating Tasks Cron Utility si vous avez besoin de plus d'informations sur l'utilisation de l'utilitaire crontab sur Oracle Linux.
Informations supplémentaires
- Oracle Linux : installation du serveur de messagerie Postfix
- Documentation Oracle Linux
- Bibliothèque Oracle Learning
Ressources de formation supplémentaires
Explorez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenu de formation gratuit sur le canal Oracle Learning YouTube. En outre, accédez à education.oracle.com/learning-explorer pour devenir explorateur Oracle Learning.
Pour consulter la documentation du produit, consultez Oracle Help Center.
Use the Crontab Utility to Schedule Tasks on Oracle Linux
F49759-04
July 2022
Copyright © 2021, Oracle and/or its affiliates.