← Retour au portail

Fiche 11 - Cron — Planification de tâches sous Linux

Automatiser l'exécution de commandes ou scripts à intervalles réguliers avec cron et crontab sous Debian.

Intermédiaire — SISR 1ère année ⏱️ 20 min 📁 Administration système

🎯 Objectifs de la fiche

  1. Principe de cron — Démon de planification, fichiers crontab
  2. Syntaxe d'une ligne crontab — Les 5 champs de temps + la commande
  3. Gérer sa crontab — crontab -e, -l, -r
  4. Cron système vs cron utilisateur — /etc/cron.d, /etc/cron.daily, anacron
  5. Exemples pratiques — Sauvegarde, nettoyage, mise à jour

Prérequis

Un système Debian avec accès terminal. Connaître les commandes de base Linux. Savoir créer un script bash simple.

1. Principe de cron

Cron est un démon (service en arrière-plan) qui exécute automatiquement des commandes ou des scripts à des moments précis définis dans des fichiers appelés crontabs. Il démarre au boot et vérifie chaque minute s'il y a des tâches à exécuter.

# Vérifier que cron est actif
sudo systemctl status cron

# Redémarrer cron si nécessaire
sudo systemctl restart cron

2. Syntaxe d'une ligne crontab

┌───────────── minute       (0-59)
│ ┌───────────── heure       (0-23)
│ │ ┌───────────── jour du mois (1-31)
│ │ │ ┌───────────── mois        (1-12)
│ │ │ │ ┌───────────── jour de semaine (0-7, 0 et 7 = dimanche)
│ │ │ │ │
* * * * *  commande_à_exécuter
SymboleSignificationExemple
*Toutes les valeurs possibles* dans heure = toutes les heures
,Liste de valeurs1,15 = à la 1ère et 15ème minute
-Intervalle de valeurs8-17 = de 8h à 17h
*/nToutes les n unités*/5 = toutes les 5 minutes
@rebootAu démarrage du système@reboot /opt/script.sh
@dailyUne fois par jour à minuit@daily /opt/backup.sh
@weeklyUne fois par semaine (dimanche)@weekly /opt/clean.sh

3. Exemples de lignes crontab

ExpressionSignification
0 2 *Tous les jours à 2h00 du matin
/5 *Toutes les 5 minutes
0 8-18 1-5Toutes les heures de 8h à 18h, du lundi au vendredi
30 23 0Tous les dimanches à 23h30
0 0 1 Le 1er de chaque mois à minuit
0 0 1 1 *Le 1er janvier à minuit (une fois par an)
@rebootAu démarrage du système

4. Gérer sa crontab utilisateur

# Éditer sa crontab (ouvre l'éditeur défini dans $EDITOR)
crontab -e

# Lister les tâches planifiées de l'utilisateur courant
crontab -l

# Supprimer toute sa crontab (attention !)
crontab -r

# Éditer la crontab d'un autre utilisateur (en root)
sudo crontab -u alice -e
💡 Lors du premier lancement de crontab -e, choisissez nano (option 1) comme éditeur si vous n'êtes pas à l'aise avec vim.

5. Cron système — /etc/cron.*

CheminFréquenceUtilisation
/etc/cron.d/PersonnaliséeFichiers crontab pour les services système (format crontab standard + nom d'utilisateur)
/etc/cron.hourly/Toutes les heuresScripts exécutés chaque heure
/etc/cron.daily/Tous les joursScripts exécutés chaque jour (ex: logrotate)
/etc/cron.weekly/Toutes les semainesScripts exécutés chaque semaine
/etc/cron.monthly/Tous les moisScripts exécutés chaque mois
/etc/crontabPersonnaliséeCrontab système globale (inclut un champ utilisateur)
# Exemple de fichier dans /etc/cron.d/monservice
# Format : minute heure jour mois joursemaine utilisateur commande
0 3 * * * root /opt/scripts/backup.sh >> /var/log/backup.log 2>&1
ℹ️ La redirection 2>&1 envoie les erreurs (stderr) vers le même fichier que la sortie standard (stdout). C'est indispensable pour voir les erreurs dans les logs cron.

6. Exemples pratiques

6.1 Sauvegarde quotidienne d'un répertoire

# Dans crontab -e
# Tous les jours à 2h00 : sauvegarde de /var/www dans /backup/
0 2 * * * tar -czf /backup/www-$(date +\%Y\%m\%d).tar.gz /var/www/ 2>&1

6.2 Nettoyage des fichiers temporaires

# Tous les dimanches à 3h00 : supprimer les fichiers de plus de 7 jours dans /tmp
0 3 * * 0 find /tmp -type f -mtime +7 -delete

6.3 Vérification d'espace disque et alerte

# Toutes les heures : vérifier que l'espace disque ne dépasse pas 80%
0 * * * * df -h / | awk 'NR==2 {if (int($5) > 80) print "ALERTE: disque "$5}' >> /var/log/disque.log

6.4 Mise à jour automatique des paquets (hors-production)

# Tous les lundis à 4h00 : mise à jour silencieuse
0 4 * * 1 apt-get update -q && apt-get upgrade -y -q >> /var/log/apt-cron.log 2>&1
⚠️ Les mises à jour automatiques en production sont risquées — une mise à jour peut casser un service. En production, préférez apt-get upgrade --dry-run pour voir ce qui serait mis à jour sans l'appliquer.

7. Consulter les logs cron

# Voir les exécutions cron dans les logs système
sudo grep CRON /var/log/syslog | tail -20

# Ou avec journalctl
sudo journalctl -u cron --since "1 hour ago"

# Voir les logs d'une tâche spécifique (si redirection configurée)
tail -f /var/log/backup.log
Que signifie */5 dans le champ des minutes d'une crontab ?
  • À la 5ème minute uniquement
  • Toutes les 5 minutes
  • Entre la 0ème et la 5ème minute
  • 5 fois par heure aléatoirement

✅ Réponse : Toutes les 5 minutes

Quelle commande ouvre l'éditeur de la crontab de l'utilisateur courant ?
  • crontab -l
  • crontab -r
  • crontab -e
  • nano /etc/crontab

✅ Réponse : crontab -e

Que fait la ligne : 0 2 * /opt/backup.sh ?
  • Exécute backup.sh toutes les 2 minutes
  • Exécute backup.sh tous les jours à 2h00
  • Exécute backup.sh le 2 de chaque mois
  • Exécute backup.sh toutes les 2 heures

✅ Réponse : Exécute backup.sh tous les jours à 2h00

À quoi sert 2>&1 à la fin d'une commande cron ?
  • Exécuter la commande en arrière-plan
  • Rediriger les erreurs vers la sortie standard (même fichier)
  • Dupliquer la commande deux fois
  • Ignorer les erreurs

✅ Réponse : Rediriger les erreurs vers la sortie standard (même fichier)

Quel raccourci crontab exécute une commande au démarrage du système ?
  • @boot
  • @startup
  • @reboot
  • 0 0 *

✅ Réponse : @reboot