Objectifs
- Comprendre le rôle du service
cronpour exécuter des tâches planifiées. - Lire et écrire une ligne de
crontabpour planifier une commande à un moment précis. - Planifier des tâches à intervalle régulier (ex: toutes les 5 minutes, tous les jours).
- Gérer correctement la sortie et les erreurs d’un script lancé par
cron.
Explications détaillées
Notions clés
cron : Le planificateur de tâches
cron est un service système (un “démon”) qui tourne en permanence sur les systèmes de type Unix. Son unique but est de lancer des commandes ou des scripts à des dates et heures prédéfinies. C’est l’outil de base pour toute automatisation récurrente : backups nocturnes, rapports hebdomadaires, nettoyage de fichiers temporaires, etc.
crontab : Le fichier de configuration
Chaque utilisateur du système peut avoir son propre fichier de configuration pour cron. Ce fichier est appelé une crontab (cron table).
crontab -e: La commande pour éditer votre crontab personnelle.crontab -l: La commande pour lister le contenu de votre crontab actuelle.crontab -r: La commande pour retirer (supprimer) votre crontab.
Le format d’une ligne crontab
Chaque ligne dans une crontab représente une tâche planifiée et est composée de 6 champs, séparés par des espaces.
# ┌───────────── minute (0 - 59)
# │ ┌───────────── heure (0 - 23)
# │ │ ┌───────────── jour du mois (1 - 31)
# │ │ │ ┌───────────── mois (1 - 12)
# │ │ │ │ ┌───────────── jour de la semaine (0 - 6) (0 ou 7 = Dimanche)
# │ │ │ │ │
# │ │ │ │ │
# * * * * * /chemin/absolu/vers/la/commande_a_executer
*: Le joker, qui signifie “chaque”. Une ligne* * * * * ...s’exécutera donc chaque minute.*/N: “Toutes les N”. Par exemple,*/15dans le champ des minutes signifie “toutes les 15 minutes”.5 4 * * *: À 4h05, tous les jours.0 2 * * 1: À 2h00 du matin, tous les lundis.
Gestion de la sortie et des erreurs
Par défaut, cron envoie un email à l’utilisateur avec toute sortie (stdout ou stderr) générée par la commande. Pour éviter d’inonder votre boîte mail, il est essentiel de rediriger ces sorties.
> /chemin/log.txt 2>&1: Redirige stdout et stderr vers un fichier de log.> /dev/null 2>&1: Ignore complètement toute sortie.
Vous pouvez aussi définir la variable MAILTO="" en haut de votre crontab pour désactiver globalement l’envoi d’emails.
Syntaxe / Usages
# Exemples de lignes crontab :
# Exécuter un script de backup tous les jours à 3h30 du matin
30 3 * * * /home/user/scripts/backup.sh > /home/user/logs/backup.log 2>&1
# Vérifier l'espace disque toutes les 10 minutes
*/10 * * * * /home/user/scripts/check_disk.sh
# Exécuter une tâche de nettoyage tous les dimanches à minuit
0 0 * * 0 /home/user/scripts/cleanup.sh > /dev/null 2>&1
Bonnes pratiques
- Utilisez des chemins absolus pour vos scripts et commandes. L’environnement d’exécution de
cronest très minimal et ne contient pas lePATHque vous avez dans votre session interactive. - Testez vos scripts en dehors de
cronavant de les planifier. Assurez-vous qu’ils fonctionnent comme prévu. - Redirigez toujours la sortie. C’est la règle la plus importante. Soit vers un fichier de log pour garder une trace, soit vers
/dev/nullsi la sortie n’est pas importante. - Commencez votre crontab par
MAILTO=""si vous gérez les logs manuellement et ne voulez pas recevoir d’emails.
Pièges courants
- L’environnement minimal : Votre script peut échouer dans
cronalors qu’il fonctionne dans votre terminal, car des variables d’environnement (commePATH) ou des alias ne sont pas définis. C’est pourquoi les chemins absolus sont si importants. - Permissions : Le script doit être exécutable (
chmod +x) pour l’utilisateur qui possède la crontab. - Répertoire de travail : Par défaut,
cronexécute les commandes depuis le répertoire personnel ($HOME) de l’utilisateur. Si votre script a besoin de se trouver dans un dossier spécifique, commencez-le par une commandecd /chemin/vers/mon/projet. - Le caractère
%:crontraite le caractère%d’une manière spéciale. Si vous en avez besoin dans votre commande (par exemple avecdate), vous devez l’échapper avec un backslash (\%).
Exercices
-
Votre première tâche cron :
- Ouvrez votre crontab avec
crontab -e. - Ajoutez une ligne pour que la date et l’heure actuelles soient écrites dans un fichier
/tmp/cron_test.txttoutes les minutes. - Attendez une minute ou deux, puis vérifiez le contenu du fichier avec
cat /tmp/cron_test.txt.
- Ouvrez votre crontab avec
-
Amélioration avec logs :
- Modifiez la tâche de l’exercice 1.
- La sortie doit maintenant être ajoutée au fichier (
>>) au lieu de l’écraser. - Assurez-vous que les erreurs éventuelles sont aussi redirigées vers ce même fichier.
-
Nettoyage :
- Une fois que vous avez bien compris le mécanisme, supprimez la tâche de test de votre crontab pour ne pas remplir votre
/tmpinutilement. Utilisezcrontab -epour effacer la ligne.
- Une fois que vous avez bien compris le mécanisme, supprimez la tâche de test de votre crontab pour ne pas remplir votre