Outils pour utilisateurs

Outils du site


article:service_cron

Ceci est une ancienne révision du document !


Planification de tâches avec Cron

Le démon Cron (Command Run On) est le planificateur de tâches standard sous Debian [Chapter 2, 2.7.3]. Il permet d'exécuter automatiquement des scripts ou des commandes à des heures, jours ou intervalles réguliers en arrière-plan.

1. Architecture et concepts de base

Le système repose sur deux éléments principaux :

  • Le démon cron : Un service système qui tourne en permanence et vérifie chaque minute si une tâche doit être exécutée.
  • La crontab (Cron Table) : Un fichier texte contenant la liste des tâches à exécuter et leurs horaires.

Les deux types de crontab

  • La Crontab Utilisateur : Chaque utilisateur (y compris pseudo_utilisateur ou root) possède sa propre crontab. Les tâches s'exécutent avec les privilèges de cet utilisateur.
  • La Crontab Système : Située dans /etc/crontab, elle est réservée à l'administrateur et nécessite de spécifier explicitement l'utilisateur qui lancera la commande [Chapter 2, 2.7.3].

2. La syntaxe Cron (Les 5 étoiles)

Chaque ligne d'une crontab utilisateur suit une syntaxe stricte basée sur 5 champs temporels suivis de la commande :

.---------------- minute (0 - 59)
|  .------------- heure (0 - 23)

|  |  .---------- jour du mois (1 - 31)
|  |  |  .------- mois (1 - 12)
|  |  |  |  .---- jour de la semaine (0 - 7) (0 et 7 sont le dimanche)
|  |  |  |  |
*  *  *  *  *  /chemin/vers/la/commande

Les opérateurs spéciaux

  • * (Astérisque) : Toutes les valeurs possibles.
  • , (Virgule) : Liste de valeurs spécifiques (ex: 1,3,5).
  • - (Tiret) : Plage de valeurs (ex: 1-5).
  • / (Slash) : Intervalle ou répétition (ex: */15 signifie “toutes les 15 minutes”).

3. Exemples pratiques

Syntaxe Description
0 5 * * * /usr/local/bin/backup.sh Exécute le script de sauvegarde tous les jours à 5h00 pile.
*/10 9-17 * * 1-5 /my/script.sh Exécute le script toutes les 10 minutes, de 9h à 17h, du lundi au vendredi.
0 22 * * 6 /usr/sbin/fstrim / Lance un TRIM manuel sur le SSD tous les samedis à 22h00.

Les raccourcis alias

  • @reboot : Exécute la commande une seule fois au démarrage de la machine.
  • @daily : Une fois par jour (équivalent à 0 0 * * *).

4. Exemple avancé : Suivi de mise à jour de Tealdeer

Voici comment vérifier toutes les heures si le cache locale de tealdeer (la commande tldr) a été mis à jour aujourd'hui [Chapter 2, 2.1.1].

Étape A : Le script de vérification (ex: /home/pseudo_utilisateur/bin/check_tldr.sh)

Ce script vérifie la date de modification du fichier de cache principal de tealdeer et compare ce jour avec la date du jour actuel.

#!/bin/bash

# Chemin vers le fichier d'index du cache tealdeer
CACHE_FILE="$HOME/.cache/tealdeer/tldr-pages/index.json"
LOG_FILE="$HOME/.cache/tealdeer/check_status.log"

if [ ! -f "$CACHE_FILE" ]; then
    echo "$(date '+%Y-%m-%d %H:%M:%S') - Cache inexistant. Lancement requis : tldr --update" >> "$LOG_FILE"
    exit 1
fi

# Récupération de la date de modification du fichier (format YYYY-MM-DD)
FILE_DATE=$(date -r "$CACHE_FILE" +%Y-%m-%d)
TODAY=$(date +%Y-%m-%d)

# Comparaison
if [ "$FILE_DATE" == "$TODAY" ]; then
    echo "$(date '+%Y-%m-%d %H:%M:%S') - Succès : Le cache Tealdeer a bien été actualisé aujourd'hui ($FILE_DATE)." >> "$LOG_FILE"
else
    echo "$(date '+%Y-%m-%d %H:%M:%S') - Attention : Le cache n'a pas bougé aujourd'hui (Dernière maj : $FILE_DATE)." >> "$LOG_FILE"
fi

Étape B : Planification dans Cron

Pour exécuter ce script toutes les heures à la minute 0, ajoutez cette ligne dans la crontab de pseudo_utilisateur :

0 * * * * /bin/bash /home/pseudo_utilisateur/bin/check_tldr.sh

5. Manipuler la Crontab

On utilise impérativement la commande dédiée pour éviter de corrompre les fichiers internes [Chapter 2, 2.1.3].

Commandes pour l'utilisateur courant

  • Éditer la crontab : crontab -e (Ouvre l'éditeur par défaut).
  • Afficher la crontab : crontab -l (Liste les tâches actives).
  • Supprimer la crontab : crontab -r (Supprime tout sans confirmation).

Commandes pour l'administrateur (Root)

Pour modifier la crontab d'un autre utilisateur :

sudo crontab -u pseudo_utilisateur -e

6. Les dossiers Cron automatiques

Il suffit de déposer un script exécutable dans l'un des dossiers suivants pour qu'il soit pris en charge automatiquement [Chapter 2, 2.7.3] :

  • /etc/cron.hourly/ : Exécution toutes les heures.
  • /etc/cron.daily/ : Exécution une fois par jour [Chapter 2, 2.7.3].
  • /etc/cron.weekly/ : Exécution une fois par semaine.

⚠️ Règle d'or : Les scripts déposés dans ces dossiers doivent être exécutables (chmod +x) et leur nom ne doit pas contenir de point (script est valide, script.sh sera ignoré par l'utilitaire de gestion).

7. Bonnes pratiques et pièges courants

1. Utiliser des chemins absolus

Cron s'exécute avec un environnement réseau et un $PATH extrêmement restreints.

  • ❌ Mauvais : rsync -av /src /dest (Cron risque de ne pas trouver la commande).
  • Bon : /usr/bin/rsync -av /src /dest (On indique le chemin absolu).

2. Gérer les sorties (Redirections)

Pour éviter que Cron ne génère des mails locaux inutiles en arrière-plan, redirigez le flux vers un fichier ou détruisez-le :

  • Rendre la tâche totalement silencieuse :
0 2 * * * /home/pseudo_utilisateur/bin/mon_script.sh > /dev/null 2>&1
article/service_cron.1790243907.txt.gz · Dernière modification : de retestro