Cron job : définition, syntaxe et exemples concrets
Cron job : définition simple, syntaxe de la crontab, exemples prêts à copier (toutes les 5 minutes, chaque nuit à minuit), logs, permissions et erreurs à éviter.

Cron job : c'est quoi exactement ?
Imaginez une tâche planifiée que le serveur déclenche lui-même, à intervalle régulier, sans que personne n'ait à intervenir : voilà un <strong>cron job</strong>. Son nom vient de cron, un petit programme installé sur presque tous les systèmes Linux et Unix. Discret, il tourne en permanence en arrière-plan. Chaque minute, il regarde s'il a quelque chose à lancer.
Tâche cron, job cron, cron-job : peu importe le nom que vous lui donnez, le principe reste identique. Vous indiquez au serveur l'action et le moment. Lui s'occupe du reste, jour et nuit, y compris quand plus personne n'est connecté.
Cron, crontab et cron job : trois mots, trois rôles
- <strong>Cron</strong> : le service (ou démon) qui surveille l'horloge et déclenche les tâches.
- <strong>Crontab</strong> : le fichier où sont listées les tâches, une par ligne. Chaque utilisateur du serveur peut posséder la sienne.
- <strong>Cron job</strong> : une seule ligne de ce fichier, donc une tâche précise, avec son horaire et sa commande.
Votre développeur annonce qu'il va « mettre un cron » ? Il ajoute simplement une ligne dans la crontab du serveur. C'est une brique modeste, et pourtant bien des sites en dépendent sans que leur propriétaire s'en doute.
À quoi sert un cron job sur un site ou une application ?
En coulisses, un site rentable s'active sans arrêt. Relances, mises à jour de stock, factures, nettoyage de la base : rien de tout cela ne devrait reposer sur un salarié qui se souvient de cliquer au bon moment. Ce travail-là, confiez-le au cron.
Les usages les plus courants
- Lancer chaque nuit une sauvegarde de la base et des fichiers, comme expliqué dans notre guide pour <a>sauvegarder un site WordPress</a>.
- Vider la file d'attente des emails : relances de panier, confirmations, newsletters programmées.
- Synchroniser des données avec un outil externe : stock d'un ERP, prix d'un fournisseur, contacts d'un CRM.
- Régénérer un sitemap ou un flux produit pour Google Merchant Center.
- Purger les sessions expirées, les fichiers temporaires et les vieux logs.
- Produire chaque lundi matin un rapport et l'adresser par email à la direction.
Dans un logiciel métier, c'est souvent lui le moteur caché des automatisations. Quand nous concevons une application adaptée à votre activité, une grande part de la valeur tient à ces tâches autonomes : un devis relancé au bon moment, un rappel de rendez-vous parti la veille.
Cron job ou webhook : lequel choisir ?
Le cron obéit à l'horloge : à l'heure dite, il lance la tâche, qu'il se soit passé quelque chose ou non. Un webhook, lui, réagit à un événement, comme une commande payée ou un formulaire envoyé. Ma recommandation est simple : besoin d'une réaction immédiate, prenez le webhook ; traitement régulier ou groupé, restez sur le cron. Les deux se complètent très bien.
Comment fonctionne la syntaxe d'un cron job ?
Toutes les lignes de la crontab respectent le même format : cinq champs d'horaire séparés par des espaces, puis la commande. On appelle cela une expression cron (cron job expression en anglais). Obscure au premier coup d'œil ? Oui, mais connaître l'ordre des champs suffit pour la lire en quelques secondes.
Les cinq champs de l'expression cron
- <strong>Minute</strong> : de 0 à 59.
- <strong>Heure</strong> : de 0 à 23.
- <strong>Jour du mois</strong> (day of month) : de 1 à 31.
- <strong>Mois</strong> : de 1 à 12.
- <strong>Jour de la semaine</strong> : de 0 à 7, le dimanche valant aussi bien 0 que 7.
Prenons 30 2 * * * /usr/local/bin/backup.sh. Traduction : minute 30, 2 heures, n'importe quel jour du mois, n'importe quel mois, n'importe quel jour de la semaine, exécuter backup.sh. En clair, chaque nuit à 2 h 30.
Les caractères spéciaux à connaître
- L'astérisque * vaut « toutes les valeurs » : every minute, every hour, every day.
- Avec la virgule, vous énumérez : 1,15 dans le champ jour désigne le 1er et le 15.
- Le tiret marque une plage : 1-5 en jour de la semaine couvre du lundi au vendredi.
- Grâce à la barre oblique, on fixe un pas : */5 en minute signifie toutes les cinq minutes.
Les raccourcis prêts à l'emploi
Pourquoi s'embêter avec cinq champs quand un mot suffit ? La plupart des versions de cron comprennent des raccourcis lisibles : @hourly pour chaque heure, @daily pour chaque jour à minuit, @weekly pour le dimanche à minuit, @monthly pour le premier du mois à minuit. Reste @reboot, qui exécute la commande au démarrage du serveur. Je vous conseille de les employer dès que possible : ils évitent bien des fautes de frappe.
Exemples de cron jobs à copier
Rien de tel que des lignes réelles. Voici les horaires qui reviennent le plus souvent sur un site ou une application. À vous de remplacer le chemin du script par le vôtre.
Les horaires les plus demandés
- <strong>Toutes les minutes</strong> : * * * * * /usr/local/bin/queue.sh
- <strong>Toutes les 5 minutes</strong> : */5 * * * * /usr/local/bin/sync-stock.sh
- <strong>Toutes les heures, à la minute 0</strong> : 0 * * * * /usr/local/bin/cache.sh
- <strong>Chaque jour à minuit</strong> : 0 0 * * * /usr/local/bin/backup.sh
- <strong>Du lundi au vendredi à 8 h</strong> : 0 8 * * 1-5 /usr/local/bin/rapport.sh
- <strong>Le premier jour du mois à 6 h</strong> : 0 6 1 * * /usr/local/bin/factures.sh
- <strong>Chaque dimanche à 3 h</strong> : 0 3 * * 0 /usr/local/bin/purge.sh
Commenter sa crontab pour s'y retrouver
Tout ce qui suit un # en début de ligne est un commentaire, et cron l'ignore. Prenez le réflexe d'en placer un au-dessus de chaque tâche, par exemple # Sauvegarde : run the job every day at midnight, juste avant 0 0 * * *. Autre cas : # Factures : first day of the month, 6 h. Six mois plus tard, vous ou le développeur suivant comprendrez d'un regard le rôle de chaque ligne.
Les générateurs de cron en ligne
L'expression vous intimide ? Un générateur de cron (cron job generator) la rédige pour vous : on choisit l'horaire dans une interface, il fournit la ligne. Certains outils travaillent dans l'autre sens. Collez-y une expression, ils la traduisent en français courant et affichent les prochaines dates d'exécution. Avant d'enregistrer une ligne, c'est à mon avis la vérification la plus sûre.
Créer, gérer et surveiller un cron job sous Linux
Sur un serveur Linux, la commande crontab fait tout. Encore faut-il un accès SSH, autrement dit un terminal connecté à distance au serveur. En hébergement mutualisé, le panneau de contrôle propose souvent une page « Tâches cron » qui remplit le même rôle via un formulaire.
Les commandes de base
- Pour modifier vos tâches, tapez crontab avec l'option <strong>-e</strong> : le fichier s'ouvre, et cron applique les changements dès l'enregistrement.
- L'option <strong>-l</strong> affiche la liste de ce qui est planifié.
- Attention à <strong>-r</strong> : elle efface toute la crontab, sans demander confirmation. Maniez-la avec prudence.
- Seul l'administrateur peut ajouter <strong>-u nom -e</strong> pour éditer la crontab d'un autre utilisateur.
Les permissions : qui a le droit d'utiliser cron ?
Deux fichiers règlent l'accès à cron. Quand /etc/cron.allow existe, seuls les comptes qui y sont inscrits peuvent créer des tâches. À défaut, le système consulte /etc/cron.deny et bloque ceux qui s'y trouvent. Root, quoi qu'il arrive, garde la main sur tout.
S'y ajoutent une crontab système, /etc/crontab, et le dossier /etc/cron.d. Leur format prévoit un champ supplémentaire, placé entre l'horaire et la commande, pour désigner le compte qui exécutera la tâche. On écrit donc l'horaire, le user, and the command. Retenez qu'une tâche hérite des droits de ce compte : ne cédez pas à la facilité de tout lancer en root.
Lire les logs d'un cron job
À chaque lancement, cron laisse une trace dans les journaux du système. Debian et Ubuntu les rangent dans /var/log/syslog : filtrez les lignes contenant CRON. Red Hat, Rocky ou AlmaLinux les placent dans /var/log/cron. Sur un système récent, journalctl donne aussi accès à ces entrées.
Méfiez-vous toutefois : ces journaux prouvent que la tâche a démarré, pas qu'elle a abouti. Pour connaître le résultat, redirigez la sortie du script vers un fichier, comme dans l'exemple de la boutique. Vous découvrez ces fichiers ? Notre article sur les logs serveur vous apprend à les lire sans être développeur.
Cron sur WordPress, en ligne ou sur Kubernetes
WordPress utilise son propre mécanisme, WP-Cron, qui ignore l'horloge du serveur et attend qu'un visiteur charge une page. Résultat, sur un site peu fréquenté, les tâches accumulent du retard. Je recommande la solution habituelle : désactivez WP-Cron dans wp-config.php et faites-le appeler par un vrai cron du serveur, toutes les 5 ou 15 minutes.
Pas d'accès à la crontab chez votre hébergeur ? Un service de cron en ligne (cron job online) peut appeler une adresse de votre site à l'horaire choisi. Parmi les plus connus, cron-job.org propose une formule gratuite. Côté Kubernetes, enfin, l'objet CronJob reprend la même syntaxe à cinq champs pour démarrer des conteneurs à heure fixe.
Les erreurs courantes avec un cron job
Quand une tâche cron échoue, elle ne prévient personne. Le site tourne normalement, et c'est trois semaines plus tard qu'on s'aperçoit que les sauvegardes s'étaient arrêtées. Voici les pièges que nous croisons le plus souvent pendant nos audits techniques.
Le script marche à la main, mais pas avec cron
Problème numéro un, et de loin. Cron exécute les commandes dans un environnement très pauvre : son PATH, c'est-à-dire la liste des dossiers où chercher les programmes, est réduit au strict minimum. Résultat, php ou node peuvent rester introuvables. Écrivez donc toujours les chemins complets, /usr/bin/php plutôt que php, et placez-vous dans le bon dossier dès le début du script.
Le pourcentage qui coupe la commande
Saviez-vous que % a un sens spécial dans une crontab ? Il y représente un retour à la ligne. Une commande contenant une date formatée avec ce signe se retrouve coupée en deux. Échappez-le avec une barre oblique inverse ou, mieux encore, déplacez la commande dans un script séparé.
Le décalage horaire
L'heure qui compte, c'est celle du serveur, pas la vôtre. Or beaucoup de machines tournent en temps universel (UTC). Votre « rapport de 8 h » risque alors de partir à 9 h ou 10 h, heure de Paris, selon la saison. Avant de fixer un horaire important, lancez la commande date pour connaître le fuseau du serveur.
Deux exécutions qui se chevauchent
Supposons une tâche planifiée toutes les 5 minutes qui en met parfois 8 à se terminer. Elle repart avant que la première copie ait fini, et les deux se gênent : doublons, emails envoyés en double, base bloquée. Contre ce cas, utilisez flock. Il pose un verrou et interdit à une nouvelle copie de démarrer tant que la précédente travaille.
Aucune alerte en cas d'échec
D'origine, cron expédie la sortie des tâches par email local, que personne ne consulte. Renseignez la variable MAILTO en tête de crontab avec une vraie adresse. Autre option : faites appeler une adresse de contrôle par le script à la fin de chaque exécution réussie. Ce battement de cœur appartient à tout bon monitoring de site web : si le signal manque à l'heure prévue, l'alerte part.
Questions fréquentes
Une tâche planifiée, tout simplement : le serveur exécute seul une commande à une heure ou à un intervalle donné. Le terme vient de cron, le programme Linux chargé de ces tâches. Vous entendrez aussi « tâche cron » ou « travail cron ».
Mettez */5 dans le champ des minutes et un * dans chacun des quatre autres. Concrètement, la ligne commence par */5 * * * * et se termine par le chemin complet de votre script. Elle se déclenchera à 0, 5, 10, 15 minutes, et ainsi de suite, chaque heure.
Ouvrez les journaux système : /var/log/syslog sous Debian et Ubuntu, /var/log/cron sous Red Hat. Vous y lirez l'heure de chaque lancement. Pour savoir si la tâche a réussi, redirigez sa sortie vers un fichier de log. Le mieux, selon moi, reste une alerte automatique dès qu'une exécution manque à l'appel.


