cron est le planificateur de tâches historique de Linux. Il exécute des commandes à des intervalles définis, toutes les minutes, chaque jour à 3 h, chaque lundi, selon une syntaxe à 5 champs. C'est l'outil de base pour automatiser les sauvegardes, le nettoyage de fichiers, les synchronisations et toute opération récurrente sur un serveur.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Comprendre le fonctionnement du démon cron et ses fichiers de configuration
- Lire et écrire la syntaxe à 5 champs d'une ligne crontab
- Créer, modifier et supprimer des crontabs utilisateur avec
crontab -e - Utiliser les répertoires système
/etc/cron.d/,/etc/cron.daily/etc. - Diagnostiquer une tâche cron qui ne s'exécute pas
- Appliquer les bonnes pratiques de sécurité et de fiabilité
Dans quel contexte ?
Section intitulée « Dans quel contexte ? »cron intervient dès qu'une action doit se répéter automatiquement sur un système Linux :
- Sauvegarder une base de données ou un répertoire chaque nuit
- Nettoyer les fichiers temporaires ou les logs obsolètes
- Synchroniser des données entre serveurs avec
rsync - Renouveler un certificat Let's Encrypt
- Envoyer un rapport par e-mail chaque semaine
- Vérifier l'espace disque et alerter si un seuil est dépassé
Comment fonctionne cron
Section intitulée « Comment fonctionne cron »Le démon cron (crond sur Red Hat, cron sur Debian/Ubuntu) tourne en permanence. Chaque minute, il vérifie :
- Les crontabs utilisateur, éditées avec
crontab -e, stockées dans/var/spool/cron/crontabs/ - Le fichier
/etc/crontab, la crontab système - Les fichiers dans
/etc/cron.d/, des crontabs supplémentaires déposées par les paquets - Les répertoires
/etc/cron.{hourly,daily,weekly,monthly}/, des scripts exécutés parrun-parts
# Debian/Ubuntusystemctl status cron
# RHEL/Fedora/Rocky/Almasystemctl status crond● cron.service - Regular background program processing daemon Loaded: loaded (/lib/systemd/system/cron.service; enabled; preset: enabled) Active: active (running)La syntaxe crontab
Section intitulée « La syntaxe crontab »Chaque ligne d'une crontab suit ce format :
┌───────────── minute (0-59)│ ┌───────────── heure (0-23)│ │ ┌───────────── jour du mois (1-31)│ │ │ ┌───────────── mois (1-12)│ │ │ │ ┌───────────── jour de la semaine (0-7, 0 et 7 = dimanche)│ │ │ │ │* * * * * commande à exécuterOpérateurs
Section intitulée « Opérateurs »| Opérateur | Signification | Exemple |
|---|---|---|
* | Toutes les valeurs | * * * * * = chaque minute |
, | Liste de valeurs | 1,15 * * * * = aux minutes 1 et 15 |
- | Plage | 1-5 * * * * = minutes 1 à 5 |
/ | Pas (intervalle) | */10 * * * * = toutes les 10 minutes |
Exemples pratiques
Section intitulée « Exemples pratiques »| Expression | Signification |
|---|---|
0 3 * * * | Chaque jour à 3 h 00 |
30 8 * * 1-5 | Du lundi au vendredi à 8 h 30 |
0 */2 * * * | Toutes les 2 heures (à minute 0) |
0 0 1 * * | Le 1er de chaque mois à minuit |
*/5 * * * * | Toutes les 5 minutes |
0 22 * * 0 | Chaque dimanche à 22 h |
Raccourcis
Section intitulée « Raccourcis »cron reconnaît aussi des raccourcis qui remplacent les 5 champs :
| Raccourci | Équivalent | Signification |
|---|---|---|
@reboot | - | Au démarrage du système |
@hourly | 0 * * * * | Chaque heure |
@daily | 0 0 * * * | Chaque jour à minuit |
@weekly | 0 0 * * 0 | Chaque dimanche à minuit |
@monthly | 0 0 1 * * | Le 1er du mois à minuit |
@yearly | 0 0 1 1 * | Le 1er janvier à minuit |
Gérer les crontabs utilisateur
Section intitulée « Gérer les crontabs utilisateur »Éditer la crontab
Section intitulée « Éditer la crontab »crontab -eL'éditeur par défaut s'ouvre (défini par $EDITOR ou $VISUAL). Ajoutez vos lignes et sauvegardez.
Afficher la crontab actuelle
Section intitulée « Afficher la crontab actuelle »crontab -lSupprimer toute la crontab
Section intitulée « Supprimer toute la crontab »crontab -rÉditer la crontab d'un autre utilisateur (root)
Section intitulée « Éditer la crontab d'un autre utilisateur (root) »sudo crontab -u www-data -eFichiers système
Section intitulée « Fichiers système »/etc/crontab
Section intitulée « /etc/crontab »La crontab système contient un champ utilisateur supplémentaire :
# m h dom mon dow user command17 * * * * root cd / && run-parts --report /etc/cron.hourly25 6 * * * root test -x /usr/sbin/anacron || run-parts --report /etc/cron.daily47 6 * * 7 root test -x /usr/sbin/anacron || run-parts --report /etc/cron.weekly52 6 1 * * root test -x /usr/sbin/anacron || run-parts --report /etc/cron.monthly/etc/cron.d/
Section intitulée « /etc/cron.d/ »Ce répertoire accueille des fichiers au format crontab (avec champ utilisateur). Les paquets y déposent leurs tâches planifiées :
ls /etc/cron.d/e2scrub_all popularity-contest sysstatRépertoires périodiques
Section intitulée « Répertoires périodiques »Les scripts placés dans ces répertoires sont exécutés automatiquement par run-parts :
| Répertoire | Fréquence |
|---|---|
/etc/cron.hourly/ | Chaque heure |
/etc/cron.daily/ | Chaque jour |
/etc/cron.weekly/ | Chaque semaine |
/etc/cron.monthly/ | Chaque mois |
Variables d'environnement
Section intitulée « Variables d'environnement »cron exécute les commandes dans un environnement minimal. Le PATH est réduit, les variables de votre shell interactif ne sont pas disponibles.
# Définir des variables en haut de la crontabSHELL=/bin/bashPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binMAILTO=admin@example.com
# La commande utilise le PATH complet0 3 * * * /usr/local/bin/backup.sh| Variable | Effet |
|---|---|
SHELL | Shell utilisé pour exécuter les commandes |
PATH | Répertoires de recherche des commandes |
MAILTO | Destinataire des sorties (vide = pas d'e-mail) |
HOME | Répertoire de travail (par défaut celui de l'utilisateur) |
Contrôle d'accès
Section intitulée « Contrôle d'accès »Deux fichiers contrôlent qui peut utiliser cron :
| Fichier | Effet |
|---|---|
/etc/cron.allow | Si ce fichier existe, seuls les utilisateurs listés peuvent utiliser cron |
/etc/cron.deny | Les utilisateurs listés sont interdits (ignoré si cron.allow existe) |
Si aucun des deux fichiers n'existe, le comportement dépend de la distribution :
- Debian/Ubuntu : tous les utilisateurs peuvent utiliser cron
- Red Hat/Rocky : seul root peut utiliser cron
Redirection des sorties
Section intitulée « Redirection des sorties »Par défaut, cron envoie la sortie standard et d'erreur par e-mail (via MAILTO). Pour rediriger vers un fichier ou supprimer la sortie :
# Rediriger stdout et stderr vers un fichier log0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
# Supprimer toute sortie0 3 * * * /usr/local/bin/backup.sh > /dev/null 2>&1
# Rediriger stderr uniquement vers un fichier0 3 * * * /usr/local/bin/backup.sh 2>> /var/log/backup-errors.logExemples concrets
Section intitulée « Exemples concrets »Sauvegarde quotidienne
Section intitulée « Sauvegarde quotidienne »# Sauvegarde de /home chaque nuit à 2 h 3030 2 * * * /usr/bin/tar czf /backup/home-$(date +\%Y\%m\%d).tar.gz /homeNettoyage des fichiers temporaires
Section intitulée « Nettoyage des fichiers temporaires »# Supprimer les fichiers de plus de 7 jours dans /tmp chaque jour à 4 h0 4 * * * /usr/bin/find /tmp -type f -mtime +7 -deleteVérification espace disque
Section intitulée « Vérification espace disque »# Alerte si le disque dépasse 90 %, chaque heure0 * * * * df -h / | awk 'NR==2 && int($5)>90 {print "ALERTE disque : "$5}' | mail -s "Disque plein" admin@example.comDépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
| Tâche ne s'exécute pas | PATH insuffisant | Utiliser des chemins absolus ou définir PATH en haut de la crontab |
date affiche %Y%m%d | % non échappé | Remplacer % par \% dans la crontab |
| Aucune sortie visible | Sortie non redirigée | Ajouter >> /var/log/tache.log 2>&1 |
Permission denied | Script non exécutable | chmod +x /chemin/du/script.sh |
| Tâche ne tourne pas (utilisateur) | Bloqué par cron.deny | Vérifier /etc/cron.allow et /etc/cron.deny |
| Service cron inactif | Démon arrêté | sudo systemctl enable --now cron (Debian/Ubuntu) ou sudo systemctl enable --now crond (RHEL-like) |
| Script fonctionne en CLI mais pas dans cron | Variables d'environnement manquantes | Définir SHELL, PATH, HOME en haut de la crontab |
# Debian/Ubuntujournalctl -u cron --since "1 hour ago"
# RHEL/Fedora/Rocky/Almajournalctl -u crond --since "1 hour ago"
# Debian/Ubuntu (rsyslog)grep CRON /var/log/syslog | tail -20
# RHEL-like (fichier dédié)grep CROND /var/log/cron | tail -20Bonnes pratiques
Section intitulée « Bonnes pratiques »- Chemins absolus partout, ne pas supposer un
PATHcomplet - Gérer les sorties, rediriger vers un fichier log ou configurer
MAILTO - Échapper le
%dans les crontabs, toujours\% - Commenter les lignes, expliquer chaque tâche avec
# - Tester manuellement avant d'ajouter une tâche, exécuter la commande en tant que l'utilisateur cron
- Verrouiller les tâches longues, utiliser
flockpour éviter les exécutions parallèles :
# Empêcher les exécutions concurrentes avec flock*/5 * * * * /usr/bin/flock -n /tmp/backup.lock /usr/local/bin/backup.sh- Limiter l'accès, utiliser
/etc/cron.allowpour n'autoriser que les utilisateurs légitimes
Mettre en pratique
Section intitulée « Mettre en pratique »La syntaxe à 5 champs ne s'ancre vraiment qu'en voyant une tâche tourner toute seule. Ce lab vous installe dans une VM où vous écrivez une crontab avec crontab -e, planifiez une tâche récurrente et prouvez son exécution en retrouvant ses traces dans le journal de cron.
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.
Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications
À retenir
Section intitulée « À retenir »- cron exécute des tâches à intervalles réguliers selon une syntaxe à 5 champs (minute, heure, jour, mois, jour de semaine)
crontab -eédite la crontab de l'utilisateur courant,crontab -ll'affiche,crontab -rla supprime- Les commandes cron s'exécutent dans un environnement minimal, toujours utiliser des chemins absolus
- Le
%doit être échappé en\%dans les crontabs /etc/cron.d/et/etc/cron.{daily,weekly,monthly}/servent aux tâches système/etc/cron.allowet/etc/cron.denycontrôlent l'accès à cron- Toujours gérer les sorties (redirection ou
MAILTO) et verrouiller les tâches longues avecflock
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Timers systemd : L'alternative moderne à cron avec journalisation intégrée.
- Gestion des services avec systemd : Comprendre les unités systemd et systemctl.
- Journaux système avec journald : Diagnostiquer les erreurs avec journalctl.
- Rotation des logs avec logrotate : Gérer la taille des fichiers de log automatiquement.