Cron est un programme qui permet d’exécuter automatiquement des commandes et des scripts à intervalles réguliers selon une planification définie.
⚙️ Gestion du crontab
📌 Action 🧠 Commande ✏️ Éditer le crontab crontab -e
📋 Lister les tâches crontab -l
🗑️ Supprimer toutes les tâches crontab -r
👤 Éditer pour un utilisateur sudo crontab -e -u username
👁️ Voir le crontab d’un utilisateur sudo crontab -l -u username
📝 Installer depuis un fichier crontab fichier.txt
🆔 Voir qui a des crontabs ls -la /var/spool/cron/crontabs/
🕐 Syntaxe crontab
📌 Élément 🧠 Position 📊 Valeurs possibles ⏱️ Minute 1 0-59 🕐 Heure 2 0-23 📅 Jour du mois 3 1-31 📆 Mois 4 1-12 ou JAN-DEC 📋 Jour de la semaine 5 0-7 ou SUN-SAT
* * * * * commande_à_exécuter
│ │ │ │ │
│ │ │ │ └── Jour de la semaine (0-7, 0=dimanche)
│ │ │ └──── Mois (1-12)
│ │ └────── Jour du mois (1-31)
│ └──────── Heure (0-23)
└────────── Minute (0-59)
🔣 Caractères spéciaux
📌 Caractère 🧠 Signification 📊 Exemple *
Toutes les valeurs * * * * *
,
Liste de valeurs 0,15,30,45 * * * *
-
Plage de valeurs 1-5 * * * *
/
Pas/Intervalle */15 * * * *
@reboot
Au démarrage système @reboot script.sh
⏰ Planifications fréquentes
📌 Action 🧠 Planification 📊 Cron 🕛 Toutes les minutes Chaque minute * * * * *
🕐 Toutes les heures Chaque heure 0 * * * *
🌅 Chaque jour à 6h00 Quotidien 0 6 * * *
📅 Chaque lundi à 8h30 Hebdomadaire 30 8 * * 1
📆 Le 1er de chaque mois Mensuel 0 0 1 * *
🕒 Toutes les 15 minutes Quart d’heure */15 * * * *
🕕 Toutes les 5 minutes Cinq minutes */5 * * * *
🌃 Tous les jours à minuit Quotidien nocturne 0 0 * * *
🏢 En semaine à 9h00 Jours ouvrés 0 9 * * 1-5
📝 Exemples pratiques
📌 Action 🧠 Commande cron 💾 Sauvegarde quotidienne 0 2 * * * /scripts/backup.sh
📊 Rapport hebdomadaire 0 8 * * 1 /scripts/weekly-report.sh
🧹 Nettoyage des logs 0 0 * * 0 /scripts/cleanup-logs.sh
🔄 Synchronisation fichiers */30 * * * * rsync -av /src/ /dest/
📧 Envoi d’email quotidien 0 9 * * * /scripts/daily-email.sh
🔍 Vérification système */10 * * * * /scripts/health-check.sh
📂 Emplacements cron : quelle différence ?
Crontab utilisateur vs. système
📌 Méthode 🧠 Utilisation 📊 Avantages ⚠️ Inconvénients crontab -e
Tâches utilisateur personnel Isolation, sécurité Disparaît si utilisateur supprimé /etc/crontab
Tâches système globales Persistant, root Risque sécurité, format différent /etc/cron.d/
Applications/packages Modularité Nécessite format système
Cas d’usage recommandés
crontab -e
→ Sauvegardes perso, scripts utilisateur, maintenance compte
/etc/crontab
→ Tâches système critiques (nettoyage, maintenance serveur)
/etc/cron.d/
→ Applications installées, scripts partagés entre admins
/etc/cron.{daily,weekly}/
→ Scripts simples sans horaires précis
# Crontab utilisateur (crontab -e)
0 2 * * * /home/user/backup.sh
# Fichiers système (/etc/crontab, /etc/cron.d/)
0 2 * * * root /home/user/backup.sh
# ↑ utilisateur requis
📂 Fichiers et dossiers
📌 Fichier/Dossier 🧠 Description /etc/crontab
Crontab système principal /etc/cron.d/
Crontabs système supplémentaires /etc/cron.hourly/
Scripts exécutés chaque heure /etc/cron.daily/
Scripts exécutés chaque jour /etc/cron.weekly/
Scripts exécutés chaque semaine /etc/cron.monthly/
Scripts exécutés chaque mois /var/spool/cron/crontabs/
Crontabs des utilisateurs /var/log/cron
Logs d’exécution cron
🔍 Surveillance et logs
📌 Action 🧠 Commande 📜 Voir les logs cron sudo tail -f /var/log/cron
🔍 Chercher dans les logs sudo grep "utilisateur" /var/log/cron
📊 Statut du service cron sudo systemctl status cron
▶️ Démarrer le service sudo systemctl start cron
🔁 Redémarrer le service sudo systemctl restart cron
🔄 Recharger la configuration sudo systemctl reload cron
⏸️ Arrêter le service sudo systemctl stop cron
🛠️ Dépannage courant
🆘 Problème 🧠 Solution ❌ Tâche ne s’exécute pas Vérifier les logs et les permissions 📧 Pas d’email de notification Configurer le MTA système 🛡️ Problème de permissions Utiliser des chemins absolus 🌐 Variables d’environnement Définir PATH dans le crontab ⏰ Mauvais fuseau horaire Vérifier timedatectl
📝 Syntaxe incorrecte Tester avec crontab -l
📋 Variables d’environnement
Variables utiles dans le crontab
Variables système
# Définir l'éditeur
EDITOR = nano
# Définir les chemins
PATH = /usr/local/bin:/usr/bin:/bin
# Email pour les notifications
MAILTO = admin@exemple.com
# Shell à utiliser
SHELL = /bin/bash
# Répertoire de travail
HOME = /home/utilisateur
Exemple avec variables
SHELL = /bin/bash
PATH = /usr/local/bin:/usr/bin:/bin
MAILTO = admin@exemple.com
# Sauvegarde quotidienne à 2h00
0 2 * * * /scripts/backup.sh > /var/log/backup.log 2>&1
# Nettoyage hebdomadaire
0 3 * * 0 /usr/bin/find /tmp -type f -mtime +7 -delete
🎯 Raccourcis temporels
📌 Raccourci 🧠 Équivalent 📊 Description @yearly
0 0 1 1 *
Une fois par an @annually
0 0 1 1 *
Une fois par an @monthly
0 0 1 * *
Une fois par mois @weekly
0 0 * * 0
Une fois par semaine @daily
0 0 * * *
Une fois par jour @midnight
0 0 * * *
À minuit chaque jour @hourly
0 * * * *
Une fois par heure @reboot
Au démarrage Au redémarrage système
Exemples avec raccourcis
# Sauvegarde annuelle
@yearly /scripts/annual-backup.sh
# Redémarrage hebdomadaire
@weekly /sbin/reboot
# Nettoyage quotidien
@daily /scripts/cleanup.sh