Syntaxe
Format crontab
# ┌───── minute (0-59) # │ ┌───── heure (0-23) # │ │ ┌───── jour du mois (1-31) # │ │ │ ┌───── mois (1-12) # │ │ │ │ ┌───── jour de la semaine (0-7, 0&7=Dim) # * * * * * commande
Valeurs des champs
*Toute valeur (joker)
,Liste de valeurs : 1,3,5
-Plage : 1-5
/Pas : */10 (toutes les 10 unités)
0-59Plage des minutes
0-23Plage des heures
1-31Plage du jour du mois
1-12Plage du mois (ou JAN-DEC)
0-7Jour de la semaine (0&7=Dim, ou SUN-SAT)
Chaînes spéciales
Planifications abrégées
@rebootExécuter une fois au démarrage
@yearly0 0 1 1 * — une fois par an (1er jan)
@monthly0 0 1 * * — une fois par mois (le 1er)
@weekly0 0 * * 0 — une fois par semaine (dimanche)
@daily0 0 * * * — une fois par jour (minuit)
@hourly0 * * * * — une fois par heure
Exemples
Planifications courantes
30 2 * * * /usr/local/bin/backup.sh 0 9 * * 1-5 /opt/report.sh */15 * * * * /usr/bin/health-check.sh 0 0 1 * * /opt/monthly-cleanup.sh 0 8,17 * * * /opt/notify.sh
Détail des planifications
30 2 * * *Tous les jours à 2h30
0 9 * * 1-5Jours ouvrés à 9h00
*/15 * * * *Toutes les 15 minutes
0 0 1 * *Premier jour du mois, minuit
0 8,17 * * *Tous les jours à 8h et 17h
Environnement
Définir des variables
SHELL=/bin/bash PATH=/usr/local/bin:/usr/bin:/bin [email protected] HOME=/home/deploy * * * * * /opt/myjob.sh
Notes sur l'environnement
SHELLShell utilisé pour les commandes (défaut /bin/sh)
PATHChemin de recherche (minimal par défaut dans cron)
MAILTOEnvoyer la sortie à cette adresse (vide = pas de mail)
HOMERépertoire home pour la tâche cron
Journalisation
Sortie et journalisation
# rediriger stdout + stderr vers un fichier de log */5 * * * * /opt/job.sh >> /var/log/job.log 2>&1 # ignorer toute la sortie 0 3 * * * /opt/job.sh > /dev/null 2>&1 # journaliser uniquement les erreurs 0 3 * * * /opt/job.sh > /dev/null 2>> /var/log/job-err.log
Consulter les logs cron
# Debian / Ubuntu (syslog) grep CRON /var/log/syslog # RHEL / CentOS cat /var/log/cron # journalctl (systemd) journalctl -u cron --since "1 hour ago"
Planifications courantes
Patterns du quotidien
0 * * * *Toutes les heures pile
*/5 * * * *Toutes les 5 minutes
*/30 * * * *Toutes les 30 minutes
0 0 * * *Tous les jours à minuit
0 6 * * 1Tous les lundis à 6h
0 0 1,15 * *Le 1er et le 15 du mois
0 0 * * 5Tous les vendredis à minuit
0 0 1 1 *Chaque 1er janvier
Commandes crontab
Gérer les crontabs
crontab -e # éditer votre crontab crontab -l # lister votre crontab crontab -r # supprimer votre crontab crontab -u alice -l # lister le crontab d'un autre (root) crontab /path/to/file # installer le crontab depuis un fichier
Emplacements système des crontabs
/etc/crontabCrontab système (a un champ utilisateur)
/etc/cron.d/Fichiers cron supplémentaires
/etc/cron.daily/Scripts exécutés quotidiennement
/etc/cron.hourly/Scripts exécutés toutes les heures
/etc/cron.weekly/Scripts exécutés hebdomadairement
/etc/cron.monthly/Scripts exécutés mensuellement
/var/spool/cron/Stockage des crontabs par utilisateur
Conseils
Bonnes pratiques
Utiliser des chemins absolusLe PATH de cron est minimal ; toujours utiliser des chemins complets
Rediriger la sortieÉviter les envois de mails avec > /dev/null 2>&1
Fichiers verrouUtiliser flock pour éviter les exécutions simultanées
Tester d'abordExécuter la commande manuellement avant de planifier
Utiliser MAILTODéfinir MAILTO="" pour supprimer tous les mails
Vérifier le fuseau horaireCron utilise l'heure système ; vérifier avec date
Éviter le chevauchement avec flock
# exécuter seulement si pas déjà en cours * * * * * /usr/bin/flock -n /tmp/job.lock /opt/job.sh