Sommaire
Automatiser l'exécution de commandes ou scripts à intervalles réguliers avec cron et crontab sous Debian.
🎯 Objectifs de la fiche
- Principe de cron — Démon de planification, fichiers crontab
- Syntaxe d'une ligne crontab — Les 5 champs de temps + la commande
- Gérer sa crontab — crontab -e, -l, -r
- Cron système vs cron utilisateur — /etc/cron.d, /etc/cron.daily, anacron
- 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
| Symbole | Signification | Exemple |
|---|---|---|
| * | Toutes les valeurs possibles | * dans heure = toutes les heures |
| , | Liste de valeurs | 1,15 = à la 1ère et 15ème minute |
| - | Intervalle de valeurs | 8-17 = de 8h à 17h |
| */n | Toutes les n unités | */5 = toutes les 5 minutes |
| @reboot | Au démarrage du système | @reboot /opt/script.sh |
| @daily | Une fois par jour à minuit | @daily /opt/backup.sh |
| @weekly | Une fois par semaine (dimanche) | @weekly /opt/clean.sh |
3. Exemples de lignes crontab
| Expression | Signification |
|---|---|
| 0 2 * | Tous les jours à 2h00 du matin |
| /5 * | Toutes les 5 minutes |
| 0 8-18 1-5 | Toutes les heures de 8h à 18h, du lundi au vendredi |
| 30 23 0 | Tous les dimanches à 23h30 |
| 0 0 1 | Le 1er de chaque mois à minuit |
| 0 0 1 1 * | Le 1er janvier à minuit (une fois par an) |
| @reboot | Au 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.*
| Chemin | Fréquence | Utilisation |
|---|---|---|
| /etc/cron.d/ | Personnalisée | Fichiers crontab pour les services système (format crontab standard + nom d'utilisateur) |
| /etc/cron.hourly/ | Toutes les heures | Scripts exécutés chaque heure |
| /etc/cron.daily/ | Tous les jours | Scripts exécutés chaque jour (ex: logrotate) |
| /etc/cron.weekly/ | Toutes les semaines | Scripts exécutés chaque semaine |
| /etc/cron.monthly/ | Tous les mois | Scripts exécutés chaque mois |
| /etc/crontab | Personnalisée | Crontab 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
- ☐ Service cron actif (systemctl status cron)
- ☐ Syntaxe crontab maîtrisée (5 champs + commande)
- ☐ crontab -e utilisé pour créer une tâche de test
- ☐ crontab -l affiche la tâche créée
- ☐ Logs cron consultés pour vérifier l'exécution
- ☐ Redirection des sorties configurée (>> log 2>&1)
Que signifie */5 dans le champ des minutes d'une crontab ?
✅ Réponse : Toutes les 5 minutes
Quelle commande ouvre l'éditeur de la crontab de l'utilisateur courant ?
✅ Réponse : crontab -e
Que fait la ligne : 0 2 * /opt/backup.sh ?
✅ Réponse : Exécute backup.sh tous les jours à 2h00
À quoi sert 2>&1 à la fin d'une commande cron ?
✅ 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 ?
✅ Réponse : @reboot
Suis ta progressionConnecte-toi pour marquer les ressources comme terminées et retrouver ton avancement.
Se connecter