Que ce soit pour exécuter une sauvegarde automatique, envoyer des emails planifiés ou nettoyer des fichiers temporaires, les tâches automatisées sont omniprésentes dans le fonctionnement d’un serveur. Au cœur de ces automatisations se trouve un outil méconnu du grand public mais incontournable pour les administrateurs système : la tâche CRON. Si vous gérez un site web, un serveur Linux ou un projet nécessitant des opérations répétitives, comprendre le fonctionnement des tâches CRON est essentiel. Dans cet article, nous vous proposons une définition claire des tâches CRON, une présentation de leur fonctionnement, et un guide pratique pour les configurer simplement sur un système Unix ou Linux.
La définition d’une tâche CRON et son utilité dans un environnement Unix/Linux
Le terme CRON désigne un programme de planification de tâches, utilisé principalement sur les systèmes Unix et Linux. Son nom vient du mot grec chronos, qui signifie “temps”, ce qui résume parfaitement son rôle : exécuter des tâches à des intervalles de temps prédéfinis, de manière répétitive et autonome. Une tâche CRON (ou « cron job » en anglais) est donc une commande ou un script exécuté automatiquement selon un planning déterminé à l’avance. Ce planificateur repose sur un fichier appelé crontab (contraction de « cron table ») dans lequel chaque ligne correspond à une instruction. Chaque utilisateur peut avoir sa propre crontab, ce qui permet une personnalisation fine de l’automatisation système. Les tâches CRON sont utilisées pour :
- Automatiser des sauvegardes de bases de données ou de fichiers ;
- Mettre à jour des applications ou des scripts à intervalles réguliers ;
- Nettoyer les fichiers temporaires ou les logs système ;
- Exécuter des scripts d’analyse ou de reporting ;
- Lancer des emails automatiques (newsletters, relances, etc.).
Ainsi, CRON est l’outil idéal pour tout ce qui doit être fait régulièrement, sans intervention humaine. De fait, une tâche CRON est en quelque sorte un moyen d’exécuter automatiquement une ou plusieurs commandes Linux à des intervalles définis.
Les origines et l’évolution historique de CRON
Le système CRON a été conçu dans les années 1970, à l’époque des premières versions d’Unix. La toute première version a été écrite par Ken Thompson en 1975 pour Version 7 Unix (V7), dans un contexte où l’automatisation devenait nécessaire pour alléger les tâches des administrateurs système. Cette première version de CRON fonctionnait de manière très basique : elle lisait un fichier contenant la liste des tâches à exécuter, en suivant un cycle de vérification toutes les minutes. À cette époque, les besoins en planification étaient rudimentaires, mais CRON répondait déjà à une logique puissante : lancer des processus à date et heure précises.
Dans les années 1980, avec la montée en puissance de BSD (Berkeley Software Distribution), CRON a été considérablement amélioré pour supporter des fichiers de tâches utilisateurs (user crontabs). Il est ensuite intégré dans System V Unix avec une approche légèrement différente. Ces deux versions ont évolué en parallèle dans différents dérivés d’Unix (AIX, Solaris, HP-UX), jusqu’à ce que Linux adopte sa propre version à partir des années 1990. La version la plus répandue aujourd’hui est Vixie CRON, écrite par Paul Vixie en 1987. Elle a été pendant longtemps la référence sur la majorité des distributions Linux. Vixie CRON introduit des fonctionnalités avancées comme les envois de notifications par email en cas d’erreur, les environnements d’exécution personnalisés et la prise en charge des crontabs utilisateurs séparés.
Avec l’arrivée de distributions modernes comme Ubuntu ou CentOS, de nouvelles implémentations sont apparues, telles que cronie (Fedora, Red Hat) ou anacron (pour exécuter les tâches CRON même si l’ordinateur est éteint à l’heure prévue). Ces outils viennent compléter ou remplacer CRON dans certains cas d’usage, notamment sur les machines non connectées en permanence.
Une utilité restée constante pour CRON, même à l’ère du cloud
Malgré l’évolution des infrastructures (cloud computing, conteneurisation avec Docker, orchestration avec Kubernetes…), CRON reste un outil largement utilisé, y compris dans les environnements DevOps. Son format simple, sa fiabilité et sa compatibilité avec presque tous les systèmes Unix-like font de lui un standard toujours pertinent. Dans des architectures cloud modernes, les tâches CRON peuvent être intégrées dans des pipelines CI/CD (intégration et déploiement continus), ou externalisées via des services comme Cloud Functions ou Amazon EventBridge Scheduler. Mais l’idée de base (déclencher une action à un moment donné) demeure inchangée depuis près de 50 ans.
La structure et la syntaxe d’une tâche CRON
La configuration d’une tâche CRON repose sur un format très rigoureux, défini dans le fichier crontab. Ce fichier contient l’ensemble des tâches planifiées pour un utilisateur donné, et chaque ligne correspond à une tâche. Comprendre la structure de cette ligne est essentiel pour éviter les erreurs d’exécution, les doublons ou les conflits horaires. Chaque ligne d’une crontab suit une syntaxe composée de six champs séparés par des espaces. Les cinq premiers précisent le moment où la tâche doit s’exécuter, et le sixième contient la commande ou le script à lancer. Voici le schéma général :
* * * * * commande à exécuter │ │ │ │ │ │ │ │ │ └── Jour de la semaine (0 à 7) — Dimanche = 0 ou 7 │ │ │ └──────── Mois (1 à 12) │ │ └────────────── Jour du mois (1 à 31) │ └──────────────────── Heure (0 à 23) └────────────────────────── Minute (0 à 59)
Les symboles et opérateurs spéciaux dans CRON
Outre les valeurs numériques simples, la syntaxe CRON accepte plusieurs opérateurs permettant de spécifier des intervalles ou des combinaisons :
*
: indique « chaque valeur possible » pour ce champ (ex.*
dans le champ des minutes = chaque minute).,
: permet de lister plusieurs valeurs (ex.1,15,30
= à la minute 1, 15 et 30).-
: définit une plage (ex.1-5
= du lundi au vendredi)./
: définit un intervalle de fréquence (ex.*/10
= toutes les 10 minutes).
Vous pouvez également utiliser des noms de mois ou de jours (en anglais) dans certains environnements : jan
, feb
, mon
, tue
, etc.
Des exemples techniques de configuration CRON
Exemple | Signification |
---|---|
0 3 * * * /home/user/backup.sh |
Exécute le script backup.sh tous les jours à 3h00 du matin. |
*/15 * * * * /usr/bin/php /var/www/script.php |
Exécute le script PHP toutes les 15 minutes, à chaque quart d’heure. |
0 6 * * 1 /home/user/script.sh |
Exécute le script chaque lundi à 6h00 du matin (1 = lundi). |
0 0 1 * * /usr/bin/find /tmp -type f -delete |
Supprime tous les fichiers temporaires du dossier /tmp chaque 1er du mois à minuit. |
30 22 * * 1-5 /home/user/stats.sh |
Lance une analyse quotidienne à 22h30, du lundi au vendredi. |
@reboot /home/user/init.sh |
Exécute le script init.sh à chaque redémarrage du système (syntaxe spéciale). |
Les fichiers système et spécificités
Outre les crontabs utilisateurs, les distributions Unix/Linux disposent aussi de fichiers système spécifiques :
/etc/crontab
: fichier global utilisé pour les tâches système. Il contient un champ utilisateur supplémentaire après les cinq champs horaires./etc/cron.d/
: répertoire permettant de déposer des fichiers CRON dédiés à certaines applications ou services./etc/cron.daily/
,/etc/cron.weekly/
, etc. : répertoires spéciaux utilisés paranacron
pour les tâches périodiques simples.
Voici un exemple de ligne issue de /etc/crontab
:
0 1 * * * root /usr/local/bin/maintenance.sh
Ici, le script est exécuté à 1h00 chaque jour, en tant que l’utilisateur root
.
Les commandes utiles pour la gestion de crontab
Pour créer ou modifier une crontab utilisateur :
crontab -e
Pour consulter les tâches CRON actives :
crontab -l
Pour supprimer la crontab de l’utilisateur courant :
crontab -r
Pour afficher les crontabs d’un autre utilisateur (avec les droits root) :
crontab -u nom_utilisateur -l
Quelques conseils de configuration
- Utilisez toujours des chemins absolus dans les commandes CRON (ex. :
/usr/bin/php
au lieu dephp
). - Redirigez les sorties standard et erreurs pour capturer les logs :
/mon/script.sh >> /var/log/script.log 2>&1
. - Définissez les variables d’environnement en haut du fichier (ex. :
PATH
,SHELL
) pour éviter les conflits d’exécution. - Ne modifiez jamais les fichiers
/var/spool/cron
directement. Utilisez toujourscrontab
pour garantir l’intégrité du système.
Configurer une tâche CRON : Méthode et bonnes pratiques
La mise en place d’une tâche CRON est relativement simple, mais elle demande rigueur, logique et anticipation. Il ne s’agit pas simplement d’inscrire une commande dans un fichier : une tâche mal pensée peut nuire à la performance du serveur, interférer avec d’autres processus ou, dans le pire des cas, ne jamais s’exécuter sans que vous ne vous en rendiez compte. Une configuration maîtrisée repose donc autant sur la technique que sur une bonne organisation opérationnelle. Au-delà de la syntaxe, il est important de prendre en compte le contexte d’exécution, les dépendances, les droits d’accès, les éventuelles ressources sollicitées par le script ou l’application, ainsi que la gestion des erreurs. Une tâche CRON mal encadrée peut entraîner des répétitions infinies, des blocages inattendus ou la saturation des logs systèmes. Voici les étapes clés pour créer une tâche CRON robuste et fonctionnelle :
Étape | Détails |
---|---|
1. Préparer le script ou la commande | Le script doit être exécutable (droits chmod +x ), tester toutes les conditions prévues (absence de fichier, échec de connexion, etc.), et renvoyer un code de sortie cohérent. Prévoyez des instructions de sécurité pour éviter les effets de bord (verrouillage avec un fichier .lock si besoin). |
2. Choisir la fréquence d’exécution | Évaluez la nécessité réelle de la fréquence : un script de nettoyage doit-il s’exécuter toutes les heures ? Privilégiez des intervalles rationnels et assurez-vous que l’exécution précédente est terminée avant de relancer le script, pour éviter les empilements. |
3. Éditer le fichier crontab | Utilisez crontab -e pour modifier le crontab de l’utilisateur actuel. Respectez la syntaxe strictement, et commentez vos lignes pour plus de clarté (ex. : # sauvegarde quotidienne ). |
4. Rediriger les sorties | Sans redirection, les erreurs sont envoyées par email (si un service de messagerie est configuré). Pour un suivi précis, redirigez la sortie standard et les erreurs vers un fichier de log : > /var/log/cron/mon_script.log 2>&1 . |
5. Tester et ajuster | Avant de planifier une exécution quotidienne ou mensuelle, testez votre commande avec un intervalle court. Analysez les logs pour détecter d’éventuelles erreurs d’environnement, de chemin ou de permission, puis ajustez selon les résultats. |
Quelques bonnes pratiques complémentaires pour CRON
- Déclarez les variables d’environnement au début du crontab : notamment
PATH
,SHELL
ouMAILTO
. Par défaut, l’environnement CRON est plus limité que celui d’un terminal utilisateur classique ; - Vérifiez que le fuseau horaire est bien défini si votre application dépend d’un timing précis. Certains environnements conteneurisés ou cloud peuvent utiliser UTC par défaut ;
- Implémentez des systèmes de verrouillage dans les scripts critiques pour éviter les exécutions multiples simultanées (via
flock
,lockfile
, ou un fichier PID) ; - Surveillez les performances : un script CRON peut charger inutilement la mémoire ou les ressources CPU si mal conçu. Intégrez-le à votre monitoring système (Prometheus, Nagios, etc.) ;
- Documentez vos tâches : chaque tâche planifiée doit être connue, avec un propriétaire désigné, un objectif précis et une procédure de vérification.
Une gestion à grande échelle avec CRON
Dans des environnements complexes ou distribués (cluster, microservices, architecture cloud), la multiplication des CRONs nécessite une gouvernance plus rigoureuse. Il peut être utile d’utiliser :
- Anacron pour les tâches planifiées qui doivent être exécutées même si la machine était éteinte à l’heure prévue ;
- Job schedulers avancés comme Jenkins, Airflow ou Celery Beat, pour les workflows complexes et interconnectés ;
- Outils d’orchestration comme Kubernetes CronJobs, qui permettent de gérer des exécutions dans des pods indépendants, avec isolation et mise à l’échelle.
Que vous soyez dans un environnement simple ou distribué, la configuration d’une tâche CRON doit toujours s’accompagner de contrôles, de tests, et de procédures de suivi. Ce n’est pas un mécanisme à « oublier » une fois installé : il doit être révisé régulièrement, audité, et intégré aux pratiques de maintenance du système.
0 commentaires