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
À 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
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