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 : - Sauvegardes automatiques - Nettoyage de fichiers - Scripts de maintenance - Tâches récurrentes
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/crontab
Format légèrement différent :
minute hour day month weekday user command
Exemple :
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. ⏰