← Retour au portail

🐧 Module L8 – Planification de tâches (Cron et systemd timers)

📘 Fiche de cours ⏱️ 2h 🐧 Bloc 2 – Linux
Objectifs : automatiser l'exécution de scripts et de commandes avec cron, comprendre la syntaxe crontab, et découvrir l'alternative systemd timers.

📖 Introduction

Après avoir appris à écrire des scripts Bash avancés (module L7), il est temps de les automatiser : plutôt que de lancer une sauvegarde ou une purge de logs manuellement chaque jour, on planifie leur exécution. Sous Linux, deux outils permettent cela : le vénérable cron, et son alternative plus moderne, les timers systemd.

💡 À retenir : Un script qui fonctionne parfaitement en exécution manuelle peut échouer une fois planifié (chemin relatif, variable d'environnement absente) — toujours tester en conditions réelles.
🎯

À l'issue de ce module, vous serez capable de :

  • Comprendre la syntaxe d'une ligne crontab (5 champs horaires + commande).
  • Éditer la crontab d'un utilisateur avec crontab -e.
  • Utiliser les répertoires cron.daily, cron.weekly pour des tâches simples.
  • Créer un timer systemd comme alternative moderne à cron.
  • Rediriger les sorties d'un script planifié vers un fichier de log.

🕐 La syntaxe de la crontab

Une ligne de crontab est composée de 5 champs horaires suivis de la commande à exécuter.

ChampValeurs possiblesSignification
10-59Minute
20-23Heure
31-31Jour du mois
41-12Mois
50-7 (0 et 7 = dimanche)Jour de la semaine
💡 À retenir : Le symbole * signifie « à chaque valeur ». Exemple : 0 3 * * * = tous les jours à 3h00 précises.

✏️ Gérer sa crontab

Chaque utilisateur (y compris root) dispose de sa propre crontab, éditable en ligne de commande.

CommandeEffet
crontab -eÉdite la crontab de l'utilisateur courant
crontab -lListe les tâches planifiées de l'utilisateur courant
crontab -rSupprime toute la crontab de l'utilisateur (⚠️ sans confirmation)
sudo crontab -e -u www-dataÉdite la crontab d'un autre utilisateur
💡

Exemple concret

0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Exécute le script de sauvegarde tous les jours à 2h00, et redirige à la fois la sortie standard et les erreurs vers un fichier de log.


📁 Les répertoires cron.daily, cron.weekly...

Pour des tâches simples exécutées une fois par jour, semaine ou mois, Debian propose des répertoires prêts à l'emploi, plus simples à gérer qu'une ligne de crontab.

RépertoireFréquence d'exécution
/etc/cron.daily/Une fois par jour
/etc/cron.weekly/Une fois par semaine
/etc/cron.monthly/Une fois par mois
💡 À retenir : Il suffit de déposer un script exécutable dans le bon répertoire (chmod +x obligatoire) — pas besoin d'écrire de ligne crontab.

⏲️ L'alternative moderne : les timers systemd

Sur les systèmes récents, systemd propose une alternative à cron : les timers, associés à des services systemd (voir module L5).

Avantage des timers systemdPar rapport à cron
Journalisation intégréeConsultable directement avec journalctl
Gestion des dépendancesPeut attendre qu'un autre service soit prêt
Rattrapage des tâches manquéesOption Persistent=true si la machine était éteinte
🔗

Pour aller plus loin

Ce module clôt la partie « automatisation » avant de basculer vers l'administration à distance avec le module L9 – SSH (Sécurisation des accès distants).