Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
cron [Le 31/10/2022, 12:17]
141.227.26.230 [Distinction d'avec Anacron] style
cron [Le 03/02/2025, 12:11] (Version actuelle)
bcag2 [Commandes pour gérer les tâches planifiées Cron]
Ligne 5: Ligne 5:
 ====== Programmer des tâches avec CRON ====== ====== Programmer des tâches avec CRON ======
  
-===== Qu'​est-ce que Cron ===== +===== Qu'​est-ce que Cron  ===== 
-**Cron** est un programme pour exécuter automatiquement des scripts, des commandes ou des logiciels à une date et une heure spécifiée précise, ou selon un cycle défini à l’avance. ​\\+**Cron** est un programme pour exécuter automatiquement des scripts, des commandes ou des logiciels à une date et une heure spécifiée précise, ou selon un cycle défini à l’avance. 
 Chaque utilisateur a un fichier **crontab**,​ lui permettant d'​indiquer les actions à exécuter.\\ Chaque utilisateur a un fichier **crontab**,​ lui permettant d'​indiquer les actions à exécuter.\\
 Cron est parfois appelé « planificateur de tâches » ou « gestionnaire de tâches planifiées ». Cron est parfois appelé « planificateur de tâches » ou « gestionnaire de tâches planifiées ».
  
-====Distinction ​d'avec Anacron====+====Distinction avec Anacron====
 Cron est plutôt utilisé pour des machines à fonctionnement permanent (comme les serveurs).\\ Cron est plutôt utilisé pour des machines à fonctionnement permanent (comme les serveurs).\\
 [[Anacron]] est plutôt utilisé pour des machines à fonctionnement discontinu (comme les PC). [[Anacron]] est plutôt utilisé pour des machines à fonctionnement discontinu (comme les PC).
  
-En effetcron lance une tâche à un moment pré-déterminé (« le 14 janvier 2018 à 15h 30 »). Si la machine n'est pas allumée, la tâche n'est pas lancée, et ne le sera jamais, même après le re-démarrage. ​Elle est perdue.+Cron a plus d'​options qu'​Anacron. Comme ce dernier, il peut lancer une tâche à un intervalle déterminé : par exemple chaque 5e jour de la semaine, chaque heure, ou chaque mois. Contrairement à Anacronil peut aussi lancer ​une tâche à un moment pré-déterminé (« le 14 janvier 2018 à 15h 30 »). \\ 
 +Limite par rapport à Anacron : si la machine n'est pas allumée, la tâche n'est pas lancée, et ne le sera jamais, même après le re-démarrage. ​__Elle ​est perdue__. Les prochaines seront évidement lancées, si la machine est allumée.
  
-[[Anacron]] utilise ​au contraire ​des indications de temps relatives (« une fois par jour / par semaine / par mois »). Si vous avez demandé une tâche toute les semaines, et que votre PC est démarré seulement au bout de 10 jours, ​anacron ​constatera le retard, et lancera donc la tâche juste après le démarrage de votre PC.+[[Anacron]] ​n'utilise ​que des indications de temps relatives (« une fois par jour / par semaine / par mois »). Autre différence d'avec Cron, si vous avez demandé une tâche toute les semaines, et que votre PC est démarré seulement au bout de 10 jours, ​Anacron ​constatera le retard, et lancera donc la tâche juste après le démarrage de votre PC.
  
-===== Comment fonctionne Cron =====+Les 2 logiciels peuvent être utilisés sur un PC régulièrement éteint, mais Anacron a le gros avantage de lancer tous les traitements en retard à chaque allumage du PC, même si ces derniers sont peu nombreux. Avec Cron, des allumages PC trop intermittents risquent d'​annuler une grande partie des traitements programmés. 
 + 
 +La syntaxe de Cron est plus complexe que celle d'​Anacron. 
 +===== Comment fonctionne Cron  =====
  
 Les tâches planifiées cron sont définies au niveau du système dans le fichier /​etc/​crontab et dans le dossier /​etc/​cron.d/​\\ Les tâches planifiées cron sont définies au niveau du système dans le fichier /​etc/​crontab et dans le dossier /​etc/​cron.d/​\\
 Pour modifier vos tâches planifiées tapez : **crontab -e** (lance un éditeur du fichier crontab)\\ Pour modifier vos tâches planifiées tapez : **crontab -e** (lance un éditeur du fichier crontab)\\
-Les tâches définies dans **crontab** sont par principe exécutées par //​[[root|root]]//​ (l'​utilisateur avec le maximum de droits), sans demande de mot de passe. Cela permet d'​exécuter potentiellement n'​importe quelle tâche système, d'où un certain risque : soyez prudent, et abstenez-vous si vous ne maitrisez ​pas bien ce que vous faite.+Les tâches définies dans **crontab** sont par principe exécutées par //​[[root|root]]//​ (l'​utilisateur avec le maximum de droits), sans demande de mot de passe. Cela permet d'​exécuter potentiellement n'​importe quelle tâche système, d'où un certain risque : soyez prudent, et abstenez-vous si vous ne maîtrisez ​pas bien ce que vous faites.
  
-Voici une courte description de la structure d'une entrée dans un fichier crontab. Les champs à renseigner sont __dans l'​ordre__ (un champs ​qu'on ne souhaite pas renseigner doit être remplis ​avec une *) : +Voici une courte description de la structure d'une entrée dans un fichier crontab. Les champs à renseigner sont __dans l'​ordre__ (un champ qu'on ne souhaite pas renseigner doit être rempli ​avec une *) : 
-    * //minute// (les minutes se numérotent de 0 à 59) + 
-    * //heure// (les heures se numérotent de 0 à 23) +    * //​minute// ​de lancement ​(les minutes se numérotent de 0 à 59) 
-    * //jours dans le mois// (les jours se numérotes de 1 à 31) +    * //​heure// ​de lancement ​(les heures se numérotent de 0 à 23) 
-    * //mois// (les mois se numérotent de 1 à 12, ou s'​énoncent par leur libellé abrégé anglais - jan ; feb ; mar ; apr ; ...) +    * //jours dans le mois// ​de lancement ​(les jours se numérotes de 1 à 31) 
-    * //jour de la semaine// (les jours se numérotent de 1 (lundi) à 7 (dimanche), ou s'​énoncent par leur libellé abrégé anglais - sun ; mon ; tue ; wed ; thu ; fri ; sat)+    * //​mois// ​de lancement ​(les mois se numérotent de 1 à 12, ou s'​énoncent par leur libellé abrégé anglais - jan ; feb ; mar ; apr ; ...) 
 +    * //jour de la semaine// ​de lancement ​(les jours se numérotent de 1 (lundi) à 7 (dimanche), ou s'​énoncent par leur libellé abrégé anglais - sun ; mon ; tue ; wed ; thu ; fri ; sat)
     * La commande à lancer.     * La commande à lancer.
 +
 +Récapitulatif des 5 premiers champs :
 +| | 1er | 2nd | 3è | 4è | 5è |
 +| | * | * | * | * | *  |
 +| id | minute | heure | jour dans le mois | mois | jour de la semaine ​ |
 +| valeur | 0-59 | 0-23 | 1-31 | 1-12 ou jan, feb, mar… | 1-7 ou mon, tue, wed… |
  
 ---- ----
Ligne 62: Ligne 74:
     * @midnight     * @midnight
     * @hourly     * @hourly
 +
 +Exemples de lancements de tâches :
 +
 +chaque demie-heure (***/30** est une instruction,​ pas deux)
 +<​code>​*/​30 * * * * commande</​code>​
 +
 +chaque heure, au début de l'​heure (0 minute au démarrage de l'​heure) :
 +<​code>​0 * * * * commande</​code>​
 +chaque heure, à la 30e minute de l'​heure :
 +<​code>​30 * * * * commande</​code>​
 +
 +chaque heure, mais uniquement entre 9h00 et 5h00
 +<​code>​0 9-5 * * * commande</​code>​
  
 Cf. aussi : Cf. aussi :
  
    man 5 crontab    man 5 crontab
- 
  
  
Ligne 75: Ligne 99:
 ===== Commandes pour gérer les tâches planifiées Cron ===== ===== Commandes pour gérer les tâches planifiées Cron =====
  
-Pour examiner les tâches planifiées de l'​utilisateur courant (le contenu de votre **crontab**,​ tapez :+Pour examiner les tâches planifiées de l'​utilisateur courant (le contenu de votre **crontab**), tapez :
  
 <code bash> <code bash>
Ligne 89: Ligne 113:
 Quand vous sortez de l'​éditeur,​ le nouveau fichier **crontab** sera installé. Le fichier est stocké dans ///​var/​spool/​cron/​crontabs/<​user>//​ mais doit seulement être modifié par l'​intermédiaire de la commande **crontab**. Quand vous sortez de l'​éditeur,​ le nouveau fichier **crontab** sera installé. Le fichier est stocké dans ///​var/​spool/​cron/​crontabs/<​user>//​ mais doit seulement être modifié par l'​intermédiaire de la commande **crontab**.
  
-Note : sur xubuntu, il faut auparavant indiquer que l'​utilisateur a le droit d'​utiliser crontab. Pour cela il faut créer un fichier ///​etc/​cron.allow//​ et y saisir le nom des utilisateurs autorisés à utiliser crontab.+<note important>​Il ​faut auparavant indiquer que l'​utilisateur a le droit d'​utiliser crontab.\\ 
 +Pour cela il faut créer un fichier ​**///​etc/​cron.allow//​** et y saisir le nom des utilisateurs autorisés à utiliser crontab.</​note>​
  
 L'​éditeur utilisé pour modifier la crontab peut être modifié par la commande : L'​éditeur utilisé pour modifier la crontab peut être modifié par la commande :
Ligne 133: Ligne 158:
  
 ===== Utilisation du répertoire /​etc/​cron.d ​ ===== ===== Utilisation du répertoire /​etc/​cron.d ​ =====
-IL est possible d'​éditer des services à exécuter automatiquement en rajoutant un fichier du nom que l'on souhaite dans le répertoire /etc/crond.d+IL est possible d'​éditer des services à exécuter automatiquement en rajoutant un fichier du nom que l'on souhaite dans le répertoire /etc/cron.d
  
-Attention contrairement aux lignes d'un fichier crontab, elles doivent préciser quel utilisateur (nom_utilisateur dans l'​exemple ci dessous) ​ exécute le script :+Attention contrairement aux lignes d'un fichier crontab, elles doivent préciser quel utilisateur (nom_utilisateur dans l'​exemple ci-dessous) ​ exécute le script :
 <​code>​* * * * * nom_utilisateur /bin/touch /​home/​me/​ding_dong</​code>​ <​code>​* * * * * nom_utilisateur /bin/touch /​home/​me/​ding_dong</​code>​
  
Ligne 158: Ligne 183:
 <code bash> <code bash>
 which python3 which python3
-# peut retourné ​par exemple+# peut par exemple ​retourner
 /​home/​mon-compte/​miniconda3/​bin/​python3 /​home/​mon-compte/​miniconda3/​bin/​python3
 </​code>​ </​code>​
  
-De même, si le programm ​(script) exécuté doit sauvegarder des fichiers, il peut être utile de précéder l'​exécution de votre script par un changement de répertoire :​+De même, si le programme ​(script) exécuté doit sauvegarder des fichiers, il peut être utile de précéder l'​exécution de votre script par un changement de répertoire :​
 <code bash> <code bash>
 * * * * * cd /​home/​mon-compte/​wokspace/​ && /​home/​mon-compte/​miniconda3/​bin/​python3 mon_script.py * * * * * cd /​home/​mon-compte/​wokspace/​ && /​home/​mon-compte/​miniconda3/​bin/​python3 mon_script.py
Ligne 171: Ligne 196:
 Il est important de vérifier que vos travaux dans **cron** fonctionnent comme prévu. Une méthode pour faire un test est de paramétrer la tâche dans le **crontab** pour qu'​elle s'​exécute quelques minutes plus tard et contrôler le résultat, avant de mettre la synchronisation de cette tâche à la bonne heure. Vous pouvez également trouver utile d'​envoyer les retours des commandes dans un fichier texte pour voir les succès ou les échecs, par exemple : Il est important de vérifier que vos travaux dans **cron** fonctionnent comme prévu. Une méthode pour faire un test est de paramétrer la tâche dans le **crontab** pour qu'​elle s'​exécute quelques minutes plus tard et contrôler le résultat, avant de mettre la synchronisation de cette tâche à la bonne heure. Vous pouvez également trouver utile d'​envoyer les retours des commandes dans un fichier texte pour voir les succès ou les échecs, par exemple :
  
-<​code>​+<​code ​bash>
 echo "​Sauvegarde de nuit: $(date)"​ >>/​tmp/​mybackup.log echo "​Sauvegarde de nuit: $(date)"​ >>/​tmp/​mybackup.log
 </​code>​ </​code>​
Ligne 177: Ligne 202:
 Une autre façon de contrôler la bonne exécution des tâches cron est d'​utiliser sa capacité à envoyer des courriels. Une autre façon de contrôler la bonne exécution des tâches cron est d'​utiliser sa capacité à envoyer des courriels.
 Pour cela il suffit de renseigner la variable MAILTO dans votre fichier crontab, exemple : Pour cela il suffit de renseigner la variable MAILTO dans votre fichier crontab, exemple :
-<​code>​MAILTO:jean.dupont@example.com</​code>​ +<​code ​bash>MAILTO="jean.dupont@example.com"</​code>​ 
-**Attention**, ​pour que cela fonctionne il faut que votre machine soit capable d'​envoyer des courriels.+<note important>​pour que cela fonctionne il faut que votre machine soit capable d'​envoyer des courriels. ​(voir par exemple : [[msmtp|MSMTP]] ou [[postfix_systeme_satellite|Système Satellite pour Postfix]], [[exim4-satellite|Système satellite pour exim4]])</​note>​\\ 
 +Au contraire, si vous ne voulez pas envoyer d’emails, ajouter simplement comme 1ère ligne utile <code bash>​MAILTO=""</​code>​
  
 Pour plus d'​informations,​ lisez les pages du //man// pour **cron** et **crontab** (le //man// est détaillé sur [[:​tutoriel:​console_ligne_de_commande|les commandes basiques]]). ​ Pour plus d'​informations,​ lisez les pages du //man// pour **cron** et **crontab** (le //man// est détaillé sur [[:​tutoriel:​console_ligne_de_commande|les commandes basiques]]). ​
-Sur une machine qui n'est pas allumée en permanence**[[anacron|anacron]]** (installé par défaut) permet de s'​assurer que les taches cron sont bien exécutées en vérifiant à intervalles régulier si un tâche n'est pas en retard.+Sur une machine qui n'est pas allumée en permanence**[[anacron|anacron]]** (installé par défaut) permet de s'​assurer que les taches cron sont bien exécutées en vérifiant à intervalles régulier si une tâche n'est pas en retard.
  
  
 ==== Log ==== ==== Log ====
-Par défaut on retrouve des log de commandes CRON dans ///​var/​log/​syslog//​ mais ce n'est pas très pratique.\\+Par défaut on retrouve des logs de commandes CRON dans ///​var/​log/​syslog//​ mais ce n'est pas très pratique.\\
 Pour activer le log spécifique de CRON:\\ Pour activer le log spécifique de CRON:\\
 Éditer le fichier ///​etc/​rsyslog.d/​50-default.conf//​ qui est appelé par ///​etc/​rsyslog.conf//​ et décommenter la ligne Éditer le fichier ///​etc/​rsyslog.d/​50-default.conf//​ qui est appelé par ///​etc/​rsyslog.conf//​ et décommenter la ligne
Ligne 197: Ligne 223:
 sudo systemctl restart cron sudo systemctl restart cron
 </​code>​ </​code>​
-Il ne reste plus qu'à surveiller les log de CRON:+Il ne reste plus qu'à surveiller les logs de CRON:
 <code bash> <code bash>
 sudo tail -f /​var/​log/​cron.log sudo tail -f /​var/​log/​cron.log
  • cron.1667215075.txt.gz
  • Dernière modification: Le 31/10/2022, 12:17
  • par 141.227.26.230