cron permet de planifier automatiquement l’exécution de commandes ou de scripts sous Linux.
Il est utile pour :
- lancer des sauvegardes
- nettoyer des fichiers temporaires
- exécuter un script de maintenance
- redémarrer un service
- générer des rapports
- automatiser une tâche d’administration

Éditer la crontab utilisateur
crontab -e
Afficher les tâches planifiées :
crontab -l
Supprimer toute la crontab de l’utilisateur :
crontab -r
Structure d’une ligne cron
* * * * * commande
| | | | |
| | | | +---- jour de la semaine : 0-7
| | | +------ mois : 1-12
| | +-------- jour du mois : 1-31
| +---------- heure : 0-23
+------------ minute : 0-59
Exemple :
30 2 * * * /usr/local/bin/sauvegarde.sh
Cette ligne exécute le script sauvegarde.sh tous les jours à 02h30.
Exemples courants
Exécuter une tâche toutes les minutes
* * * * * /usr/local/bin/script.sh
Exécuter une tâche toutes les 5 minutes
*/5 * * * * /usr/local/bin/script.sh
Exécuter une tâche toutes les heures
0 * * * * /usr/local/bin/script.sh
Exécuter une tâche tous les jours à 03h00
0 3 * * * /usr/local/bin/script.sh
Exécuter une tâche tous les lundis à 08h30
30 8 * * 1 /usr/local/bin/script.sh
Exécuter une tâche le premier jour de chaque mois
0 2 1 * * /usr/local/bin/script.sh
Exécuter une tâche du lundi au vendredi
0 7 * * 1-5 /usr/local/bin/script.sh
Exécuter une tâche toutes les 2 heures
0 */2 * * * /usr/local/bin/script.sh
Exemples d’administration système
Sauvegarde d’un dossier
0 2 * * * tar -czf /backup/etc-$(date +\%F).tar.gz /etc
Dans cron, le caractère % doit être échappé avec \%.
Sauvegarde avec script dédié
0 2 * * * /opt/scripts/backup.sh
Script possible :
#!/bin/bash
tar -czf /backup/home-$(date +%F).tar.gz /home
Rendre le script exécutable :
chmod +x /opt/scripts/backup.sh
Nettoyage des fichiers temporaires
0 4 * * * find /tmp -type f -mtime +7 -delete
Cette commande supprime les fichiers de /tmp datant de plus de 7 jours.
Redémarrage d’un service
0 5 * * 0 systemctl restart apache2
Cette tâche redémarre Apache tous les dimanches à 05h00.
Vérification d’espace disque
*/30 * * * * df -h > /var/log/disk-usage.log
Test de disponibilité d’un serveur
*/5 * * * * ping -c 3 192.168.1.1 >> /var/log/ping-routeur.log 2>&1
Synchronisation avec rsync
0 1 * * * rsync -av /home/ /backup/home/
Redirection des sorties
Par défaut, cron peut envoyer les sorties par mail local.
Il est préférable de rediriger les sorties vers un fichier de log.
0 2 * * * /opt/scripts/backup.sh >> /var/log/backup.log 2>&1
Explication :
>> ajoute la sortie standard dans le fichier
2>&1 ajoute aussi les erreurs dans le même fichier
Pour ignorer toute sortie :
0 2 * * * /opt/scripts/backup.sh > /dev/null 2>&1
Variables utiles dans crontab
On peut définir des variables au début de la crontab :
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=""
Exemple complet :
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=""
0 2 * * * /opt/scripts/backup.sh >> /var/log/backup.log 2>&1
Crontab système
La crontab système se trouve dans :
/etc/crontab
Elle contient un champ supplémentaire : l’utilisateur qui exécute la commande.
0 2 * * * root /opt/scripts/backup.sh
Répertoires cron système
Linux utilise aussi des répertoires dédiés :
/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly
Un script placé dans /etc/cron.daily sera exécuté automatiquement selon la configuration du système.
Vérifier le service cron
Sur Debian/Ubuntu :
systemctl status cron
Redémarrer cron :
systemctl restart cron
Activer cron au démarrage :
systemctl enable cron
Sur certaines distributions, le service peut s’appeler crond.
systemctl status crond
Consulter les logs
Sur Debian/Ubuntu :
grep CRON /var/log/syslog
Avec systemd :
journalctl -u cron
ou :
journalctl -u crond
Erreurs fréquentes
| Problème | Cause probable | Correction |
|---|---|---|
| Le script ne se lance pas | Script non exécutable | chmod +x script.sh |
| La commande fonctionne en terminal mais pas avec cron | PATH incomplet | Utiliser les chemins absolus |
| Pas de log | Sortie non redirigée | Ajouter >> fichier.log 2>&1 |
| Date mal interprétée | % non échappé | Utiliser \% dans la crontab |
| Droits insuffisants | Mauvais utilisateur | Utiliser la crontab root ou /etc/crontab |
| Service non actif | cron arrêté | systemctl status cron |
Bonnes pratiques
- utiliser des chemins absolus
- rediriger les sorties vers des logs
- tester les scripts manuellement avant cron
- rendre les scripts exécutables
- documenter chaque tâche
- éviter les commandes trop longues dans la crontab
- préférer un script dédié pour les tâches complexes
Exemple complet
Objectif : sauvegarder /etc tous les jours à 02h30.
Créer le script :
nano /opt/scripts/backup-etc.sh
Contenu :
#!/bin/bash
DATE=$(date +%F)
DEST="/backup/etc-$DATE.tar.gz"
tar -czf "$DEST" /etc
Droits :
chmod +x /opt/scripts/backup-etc.sh
Crontab :
30 2 * * * /opt/scripts/backup-etc.sh >> /var/log/backup-etc.log 2>&1
Récapitulatif des fichiers importants
/var/spool/cron/crontabs/ crontabs utilisateurs
/etc/crontab crontab système
/etc/cron.hourly scripts horaires
/etc/cron.daily scripts quotidiens
/etc/cron.weekly scripts hebdomadaires
/etc/cron.monthly scripts mensuels
/var/log/syslog logs cron Debian/Ubuntu
/var/log/cron logs cron selon distributions
À retenir
cron est un outil simple et puissant pour automatiser les tâches d’administration Linux.
Pour une configuration fiable, il faut toujours vérifier les chemins, les droits d’exécution et les logs.
