Cron est le planificateur de tâches de Linux. Dans cette leçon, tu vas maîtriser cron pour automatiser tes tâches.
Cron est un **daemon** qui exécute des commandes à des moments précis. Il est indispensable pour :
Chaque utilisateur a son propre fichier **crontab** contenant les tâches planifiées.
crontab -l # Lister les tâches
crontab -e # Éditer les tâches
crontab -r # Supprimer toutes les tâches
crontab -i # Confirmation avant suppression
crontab -u utilisateur -l # Voir les tâches d'un autre utilisateur (root)
┌───────────── Minute (0 - 59)
│ ┌───────────── Heure (0 - 23)
│ │ ┌───────────── Jour du mois (1 - 31)
│ │ │ ┌───────────── Mois (1 - 12)
│ │ │ │ ┌───────────── Jour de la semaine (0 - 7)
│ │ │ │ │ (0 et 7 = dimanche)
│ │ │ │ │
- * * * * commande à exécuter
| Symbole | Signification |
|---|---|
* | N'importe quelle valeur |
, | Liste de valeurs (1,3,5) |
- | Intervalle (1-5) |
/ | Intervalle régulier (*/15 = toutes les 15) |
| Expression | Signification |
|---|---|
0 * * * * | Chaque heure |
0 0 * * * | Chaque jour à minuit |
0 9 * * 1-5 | Jour ouvrable à 9h |
0 9 * * * | Chaque jour à 9h |
*/15 * * * * | Toutes les 15 minutes |
*/5 * * * * | Toutes les 5 minutes |
0 0 1 * * | Premier du mois à minuit |
0 2 * * 0 | Chaque dimanche à 2h |
30 4 1,15 * * | 1er et 15 du mois à 4h30 |
# Sauvegarde quotidienne à 18h
0 18 * * * rsync -av ~/Documents/ /media/backup/
# Nettoyage des fichiers temporaires chaque semaine
0 3 * * 0 find /tmp -type f -mtime +7 -delete
# Surveillance du disque chaque matin à 7h
0 7 * * * df -h >> ~/disk_usage.log
# Redémarrer un service chaque nuit
0 4 * * * sudo systemctl restart nginx
# Script Python chaque heure
0 * * * * /usr/bin/python3 /home/user/script.py
# Vérification DNS chaque jour à 8h
0 8 * * * ping -c 1 google.com || echo "Pas de réseau" | mail -s "Alerte" user@email.com
Cron utilise un **environnement minimal**. Tes variables ($PATH, $HOME) peuvent ne pas fonctionner.
# Définir les variables dans la crontab
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
HOME=/home/utilisateur
# Ensuite les tâches...
0 9 * * * /home/utilisateur/scripts/backup.sh
# Ignorer la sortie
0 9 * * * /script.sh > /dev/null 2>&1
# Envoyer vers un log
0 9 * * * /script.sh >> /var/log/scripts.log 2>&1
# Envoyer par email (si configuré)
MAILTO="user@example.com"
0 9 * * * /script.sh
sudo nano /etc/crontabFormat légèrement différent :
minute hour day month weekday user commandExemple :
0 3 * * * root /usr/bin/backup.sh| Répertoire | Fréquence |
|---|---|
/etc/cron.minutely | Chaque minute |
/etc/cron.hourly | Chaque heure |
/etc/cron.daily | Chaque jour |
/etc/cron.weekly | Chaque semaine |
/etc/cron.monthly | Chaque mois |
Pour une exécution unique, utilise at :
# Planifier une tâche pour demain à 10h
echo "/script.sh" | at 10:00 tomorrow
# Planifier pour dans 2 heures
echo "/script.sh" | at now +2 hours
# Lister les tâches
atq
# Supprimer une tâche
atrm 1
anacron exécute les tâches qui ont raté car l'ordinateur était éteint.
# Installer
sudo apt install anacron
# Fichier de config
sudo nano /etc/anacrontab
crontab -e
# Ajouter:
- * * * * echo "$(date)" >> ~/cron_test.txt
# Attendre 1 minute, vérifier:
cat ~/cron_test.txt
crontab -e
# Ajouter (chaque jour à 20h):
0 20 * * * rsync -avz ~/Documents/ /media/backup/ >> ~/backup.log 2>&1
crontab -e
# Chaque dimanche à 3h:
0 3 * * 0 find ~/.cache -type f -mtime +30 -delete
| Commande | Description |
|---|---|
crontab -l | Lister les tâches |
crontab -e | Éditer les tâches |
crontab -r | Supprimer tout |
at | Tâche unique |
| Raccourci | Équivalent |
|---|---|
@yearly | 0 0 1 1 * |
@monthly | 0 0 1 * * |
@weekly | 0 0 * * 0 |
@daily | 0 0 * * * |
@hourly | 0 * * * * |
@reboot | Au démarrage |
Cron est ton meilleur ami pour l'automatisation ! Utilise-le sagesse. ⏰
Cron est le gestionnaire de tâches planifiées le plus utilisé sous Linux. Il permet d'automatiser l'exécution de commandes ou de scripts à des intervalles réguliers : chaque jour à minuit, chaque lundi à 8h, tous les 15 minutes… C'est un outil indispensable pour tout administrateur système ou utilisateur Linux avancé.
Sur les systèmes utilisant systemd, le service cron s'appelle généralement cron ou crond. Il tourne en arrière-plan et vérifie toutes les minutes s'il doit exécuter une tâche.
Chaque ligne d'une crontab suit ce format :
crontab -e ouvre l'éditeur pour modifier la crontab de l'utilisateur actuel :
La première utilisation de crontab -e demande de choisir un éditeur. nano est recommandé pour les débutants :
Exemple de crontab avec commentaires et variables d'environnement :
Par défaut, cron envoie la sortie par e-mail à l'utilisateur. Pour éviter cela ou rediriger ailleurs :
Il existe aussi des crontabs système dans /etc/cron.d/ et /etc/cron.daily/, /etc/cron.hourly/, etc. :
On peut autoriser ou interdire l'usage de cron par utilisateur :
Quelques tricks pour vérifier que cron fonctionne correctement :
cron ne lance pas une tâche manquée si la machine était éteinte. anacron comble ce manque en exécutant les tâches en retard au prochain démarrage :
Un bon script lancé par cron doit être autonome (chemins absolus, gestion des erreurs) :
Cron = planificateur de tâches basé sur le temps, vérifié chaque minute
Format : minute heure jour_du_mois mois jour_de_la_semaine
crontab -e = éditer la crontab de l'utilisateur courant
crontab -l = voir sa crontab, crontab -r = supprimer
SHELL, PATH et MAILTO peuvent être définis en haut de crontab
Rediriger stdout et stderr vers un log : > fichier 2>&1
/etc/cron.d/ = crontabs système, /etc/cron.hourly/ = scripts horaires
anacron = exécution des tâches manquées au prochain boot
Un bon script cron utilise des chemins absolus et journalise ses actions