Crontab
| Fiche express | |
|---|---|
| Domaine | Planification de tâches (ordonnanceur cron) |
| Commande | crontab
|
| Contexte | Linux (paquet cron/vixie-cron), service crond/cron
|
| Voir aussi | man 5 crontab (syntaxe), man 1 crontab (commande)
|
crontab est l'outil de planification de tâches standard sous Linux : chaque utilisateur peut avoir son propre fichier crontab, exécuté par le démon cron (paquet vixie-cron ou cronie selon la distribution), en plus des crontabs système sous /etc/cron.d/ et des répertoires /etc/cron.{hourly,daily,weekly,monthly}.
Installation
yum install vixie-cron # RHEL/CentOS
apt install cron # Debian/Ubuntu
Syntaxe des 5 champs
# .---------------- minute (0 - 59)
# | .------------- heure (0 - 23)
# | | .---------- jour du mois (1 - 31)
# | | | .------- mois (1 - 12) ou jan,feb,mar,apr...
# | | | | .---- jour de la semaine (0 - 6, dimanche = 0 ou 7) ou sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * commande à exécuter
| Champ | Signification | Plage |
|---|---|---|
| MIN | Minute | 0-59 |
| HOUR | Heure | 0-23 |
| DOM | Jour du mois (Day Of Month) | 1-31 |
| MON | Mois | 1-12 |
| DOW | Jour de la semaine (Day Of Week) | 0-6 (0 = dimanche) |
| CMD | Commande à exécuter | — |
Exemple : * * * * * /root/script.sh exécute le script à chaque minute, tous les jours.
Édition du crontab utilisateur
crontab -e # éditer le crontab de l'utilisateur courant
crontab -l # lister le crontab de l'utilisateur courant
crontab -l -u username # afficher le crontab d'un autre utilisateur
crontab -r # supprimer le crontab de l'utilisateur courant (⚠️ sans confirmation)
Chaque crontab utilisateur est stocké dans /var/spool/cron/<username> (ou /var/spool/cron/crontabs/<username> selon la distribution) — ne jamais éditer ce fichier directement, toujours passer par crontab -e pour que cron recharge proprement les changements.
Lister les crontabs de tous les utilisateurs
for user in $(cut -f1 -d: /etc/passwd); do echo -e "\n==> $user:" && crontab -u "$user" -l 2>/dev/null; done
Crontab système : /etc/cron.d/
Pour déclarer une tâche en dehors des crontabs utilisateurs individuels (utile pour un paquet, un déploiement automatisé, ou une tâche versionnée) : contrairement au crontab utilisateur, ces fichiers ont un champ supplémentaire pour préciser l'utilisateur qui exécute la commande.
vi /etc/cron.d/mon_job
# MIN HOUR DOM MON DOW USER COMMANDE
* * * * * username /root/script.sh
Après création ou modification d'un fichier dans /etc/cron.d/, aucun redémarrage n'est nécessaire : cron surveille ce répertoire et recharge automatiquement.
Répertoires système (run-parts)
En plus de /etc/cron.d/, la plupart des distributions exécutent périodiquement tous les scripts exécutables déposés dans ces répertoires (via run-parts, lui-même déclenché par une entrée dans /etc/crontab) :
ls /etc/cron.hourly/ # exécuté toutes les heures
ls /etc/cron.daily/ # exécuté une fois par jour
ls /etc/cron.weekly/ # exécuté une fois par semaine
ls /etc/cron.monthly/ # exécuté une fois par mois
Alias spéciaux
@reboot # exécuté une fois au démarrage, équivalent à rien (pas d'horaire)
@yearly # une fois par an, équivalent à "0 0 1 1 *"
@annually # identique à @yearly
@monthly # une fois par mois, équivalent à "0 0 1 * *"
@weekly # une fois par semaine, équivalent à "0 0 * * 0"
@daily # une fois par jour, équivalent à "0 0 * * *"
@hourly # une fois par heure, équivalent à "0 * * * *"
Exemple : @reboot /home/xyz/myscript.sh.
Bonnes pratiques
- Rediriger systématiquement la sortie pour éviter les mails cron intempestifs si aucune supervision n'est en place :
* * * * * /root/script.sh >/dev/null 2>&1. - Le
PATHde cron est minimal (souvent juste/usr/bin:/bin) — utiliser des chemins absolus dans les scripts et commandes plutôt que de compter sur lePATHinteractif de l'utilisateur. - La variable
MAILTOen tête de crontab permet de rediriger les mails de sortie vers une adresse précise (MAILTO=admin@example.com), ou de les couper avecMAILTO="". - Après un changement direct sur le service (rare, car
crontab -erecharge déjà tout seul), unservice crond restart(ousystemctl restart cron) force la relecture complète.
Voir aussi
man 5 crontab— syntaxe complète du fichier crontabman 1 crontab— options de la commandecrontab