Automatiser l'exécution de commandes ou scripts à intervalles réguliers avec cron et crontab sous Debian.
Un système Debian avec accès terminal. Connaître les commandes de base Linux. Savoir créer un script bash simple.
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
┌───────────── 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 |
| 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 |
# É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
| 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
# 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
# Tous les dimanches à 3h00 : supprimer les fichiers de plus de 7 jours dans /tmp
0 3 * * 0 find /tmp -type f -mtime +7 -delete
# 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
# 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
# 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
✅ Réponse : Toutes les 5 minutes
✅ Réponse : crontab -e
✅ Réponse : Exécute backup.sh tous les jours à 2h00
✅ Réponse : Rediriger les erreurs vers la sortie standard (même fichier)
✅ Réponse : @reboot