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 bernard 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 (ex: un * dans le champ mois signifie “chaque mois”).
  • , (Virgule) : Liste de valeurs spécifiques (ex: 1,3,5 dans le champ jour signifie “le 1er, le 3 et le 5”).
  • - (Tiret) : Plage de valeurs (ex: 1-5 dans le champ jour de la semaine signifie “du lundi au vendredi”).
  • / (Slash) : Intervalle ou répétition (ex: */15 dans le champ minute 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 0 1 * * apt update Exécute une mise à jour du cache des paquets le 1er jour de chaque mois à minuit.
0 22 * * 6 /usr/sbin/fstrim / Lance un TRIM manuel sur le SSD tous les samedis à 22h00.

Les raccourcis alias

Cron propose des alias simplifiés pour remplacer les 5 étoiles :

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

4. Manipuler la Crontab

On ne modifie jamais les fichiers de cron directement dans /var/spool/cron/. On utilise impérativement la commande dédiée pour éviter de corrompre la base [Chapter 2, 2.1.3].

Commandes pour l'utilisateur courant

  • Éditer la crontab : crontab -e (Ouvre l'éditeur par défaut, ex: Nano ou Vim).
  • Afficher la crontab : crontab -l (Lise le contenu à l'écran sans le modifier).
  • Supprimer la crontab : crontab -r (Attention, supprime toutes vos tâches sans confirmation).

Commandes pour l'administrateur (Root)

Pour modifier la crontab d'un autre utilisateur (par exemple pour planifier une tâche sur le compte de bernard) :

sudo crontab -u bernard -e

5. Les dossiers Cron automatiques

Debian propose une alternative très pratique aux lignes de commande complexes [Chapter 2, 2.7.3]. Il suffit de déposer un script exécutable dans l'un des dossiers suivants pour qu'il soit pris en charge automatiquement :

  • /etc/cron.hourly/ : Les scripts y sont exécutés toutes les heures.
  • /etc/cron.daily/ : Les scripts y sont exécutés une fois par jour (ex: le script de nettoyage d'APT) [Chapter 2, 2.7.3].
  • /etc/cron.weekly/ : Les scripts y sont exécutés une fois par semaine.
  • /etc/cron.monthly/ : Les scripts y sont exécutés une fois par mois.

⚠️ 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'outil run-parts qui gère ces dossiers).

6. Bonnes pratiques et pièges courants

1. Utiliser des chemins absolus

Le piège le plus fréquent est que Cron s'exécute avec un environnement réseau et un $PATH extrêmement restreints. Il ne sait pas où se trouvent vos commandes.

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

Astuce : Tapez which rsync ou which curl dans votre terminal pour connaître leur chemin absolu.

2. Gérer les sorties (Redirections)

Par défaut, si une tâche produit du texte à l'écran ou génère une erreur, Cron tente d'envoyer un mail local à l'utilisateur. Pour éviter d'encombrer le système de fichiers, redirigez les sorties :

  • Rediriger les erreurs dans un fichier log :
0 2 * * * /usr/local/bin/script.sh > /var/log/mon_script.log 2>&1
  • Rendre la tâche totalement silencieuse (destruction des messages) :
0 2 * * * /usr/local/bin/script.sh > /dev/null 2>&1
article/service_cron.1790243323.txt.gz · Dernière modification : de retestro