Appearance
Planification avec cron sous Linux
cron est le service (daemon) qui exécute des tâches planifiées à des intervalles réguliers. Il permet d'automatiser des scripts: sauvegardes, rotations de logs, envoi de rapports, nettoyage de répertoires, etc.
Le principe
- Le démon
crondlit des tables de planification appelées "crontabs". - Chaque ligne d'une crontab décrit QUAND exécuter une COMMANDE.
- Les crontabs système:
/etc/crontab,/etc/cron.d/*,/etc/cron.daily/,/etc/cron.hourly/, etc. - Les crontabs utilisateur: stockées généralement dans
/var/spool/cron/et gérées viacrontab -e.
Format d'une ligne crontab
Syntaxe générale (crontab utilisateur):
* * * * * commande
│ │ │ │ │
│ │ │ │ └── Jour de la semaine (0-7, dimanche=0 ou 7)
│ │ │ └──── Mois (1-12)
│ │ └────── Jour du mois (1-31)
│ └──────── Heure (0-23)
└────────── Minute (0-59)Dans /etc/crontab et /etc/cron.d/ il y a un champ utilisateur supplémentaire:
* * * * * utilisateur commandeValeurs possibles
- Un nombre exact:
5(exécute quand le champ == 5) - Une liste:
1,15,30 - Une plage:
1-5 - Avec pas (step):
*/10(toutes les 10 unités),1-30/2 - Combinaisons:
1,5,10-20/3
Exemples
| Expression | Signification |
|---|---|
0 2 * * * | Tous les jours à 02:00 |
*/5 * * * * | Toutes les 5 minutes |
15 8-18 * * 1-5 | À :15 de chaque heure de 8h à 18h lundi→vendredi |
0 0 1 * * | Le 1er de chaque mois à minuit |
30 23 * * 0,6 | Tous les dimanches et samedis à 23:30 |
Le site https://crontab.guru/ est très utile pour tester et comprendre les expressions cron.
Gestion des crontabs
Créer/éditer
bash
crontab -e # édite votre crontab
crontab -l # affiche
crontab -r # supprimeLe premier lancement de crontab -e vous propose un éditeur (nano, vim...).
Exemple complet utilisateur
cron
# Sauvegarde de /home/user chaque jour à 01h30
30 1 * * * /home/user/scripts/backup.sh >> /home/user/logs/backup.log 2>&1
# Nettoyer /tmp toutes les 2 heures
0 */2 * * * /home/user/scripts/clean_tmp.sh > /dev/null 2>&1
# Rapport hebdomadaire dimanche 06h00
0 6 * * 0 /home/user/scripts/report.sh | mail -s "Rapport hebdo" admin@example.com> /dev/null 2>&1 supprime toute sortie (stdout et stderr)
Dans /etc/crontab
cron
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# m h dom mon dow user command
0 1 * * * root /usr/local/sbin/rotate_logs.shVariables utiles
Dans une crontab système (/etc/crontab ou /etc/cron.d/app):
SHELL=/bin/bashPATH=...(Cron impose souvent un PATH minimal)MAILTO=user@example.comMAILTOdéfinit la destination des sorties non redirigées.MAILTO=rootenvoie les courriels au superutilisateur.MAILTO=vide désactive l'envoi.HOME=/home/user
Les courriels sont visibles avec la commande mail ou dans /var/mail/root si mailutils est installé.
Bonne pratique: rediriger stdout/stderr pour conserver un log:
cron
0 2 * * * /usr/local/bin/backup_db.sh >> /var/log/backup_db.log 2>&1Répertoires périodiques
Le paquet cron (ou anacron) exécute automatiquement les scripts placés dans:
/etc/cron.hourly/
/etc/cron.daily/
/etc/cron.weekly/
/etc/cron.monthly/Les scripts doivent être exécutables et généralement sans extension.
anacron ré-exécute les tâches manquées (ex: machine éteinte la nuit) en différé.
Débogage et vérification
Journal
Consulter les logs:
bash
grep CRON /var/log/syslog # Debian/Ubuntu
journalctl -u cron # systemd cron
journalctl -t CRON # tag CRONTest manuel
Exécuter la commande directement dans un terminal pour vérifier PATH, permissions, dépendances.
Pièges fréquents
- PATH réduit → commandes introuvables (mettre chemins absolus).
- Variables d'environnement manquantes (exportez dans le script).
- Scripts non exécutables (
chmod +x). - Interpréteur manquant (ajoutez un shebang).
- Sortie rédigée vers un fichier qui n'existe pas → erreur silencieuse.
Exercices
- Planifiez une tâche qui toutes les 15 minutes ajoute la sortie de
df -h /dans$HOME/logs/disk_history.log 2>&1.
- Créez une entrée pour lancer une sauvegarde de
/home/nomvers/srv/backups/home-$(date +\%F).tar.gzune fois par jour à minuit.
- Écrivez un script
cleanup_old.shqui supprime les fichiers de plus de 30 jours dans/var/tmp/app/et planifiez-le chaque nuit à 01h20.
Quiz 🎯
Ce quiz couvre: syntaxe crontab et bonnes pratiques.
0 questions - Bonne chance !