Cron : fonctionnement et premières tâches
Auteur : Rédaction Domeny.ForSale Publié le
En bref : Cron est un mécanisme des systèmes Unix et Linux qui lance automatiquement des commandes ou des scripts selon un calendrier défini. Il permet d’effectuer des sauvegardes, de générer des rapports ou de supprimer d’anciens fichiers, par exemple tous les jours à 2 h 30. Pour qu’une tâche fonctionne correctement, il faut définir non seulement son horaire, mais aussi la commande, les permissions et la manière de vérifier les erreurs.
Comment fonctionne cron et à quoi sert-il ?
Cron fonctionne en arrière-plan comme un service système : il consulte le calendrier et lance les commandes qui y sont associées. Une commande ainsi programmée constitue une tâche cron, et crontab est la table qui contient les calendriers des tâches.
Les usages courants comprennent l’export nocturne d’une base de données, la récupération de données depuis un système externe, le recalcul de tableaux récapitulatifs et le nettoyage des fichiers temporaires. Cron se charge de lancer l’opération, pas de sa logique interne. Si le script de sauvegarde contient une erreur, le calendrier ne la corrigera pas et ne vérifiera pas non plus que la sauvegarde peut être restaurée.
La tâche s’exécute avec les permissions de l’utilisateur auquel appartient l’entrée. Il n’est généralement pas nécessaire de la lancer en tant qu’administrateur système. Le compte ne devrait avoir accès qu’aux fichiers et aux ressources nécessaires à l’opération.
Comment lire un calendrier cron ?
Dans une crontab utilisateur classique, chaque entrée comprend cinq champs temporels suivis d’une commande. De gauche à droite, ces champs indiquent : la minute, l’heure, le jour du mois, le mois et le jour de la semaine.
30 2 * * * /usr/bin/python3 /home/jean/scripts/rapport.py
Cette entrée lance le script tous les jours à 2 h 30. L’astérisque représente toutes les valeurs autorisées du champ : les trois astérisques correspondent donc à n’importe quel jour du mois, mois et jour de la semaine.
| Calendrier | Signification |
|---|---|
*/15 * * * * | Tous les quarts d’heure : aux minutes 0, 15, 30 et 45 |
0 8 * * 1-5 | Du lundi au vendredi à 8 h 00 |
0 3 1 * * | Le premier jour de chaque mois à 3 h 00 |
La barre oblique définit un pas dans le champ concerné, le trait d’union une plage, et la virgule sépare les valeurs, par exemple 0,30 dans le champ des minutes. L’écriture */15 ne signifie pas « 15 minutes après la fin de la tâche précédente » : le calendrier suit l’horloge.
Attention lorsque vous imposez à la fois un jour du mois et un jour de la semaine. Dans les implémentations courantes de cron, il suffit alors qu’une de ces deux conditions soit remplie, et non les deux. Avant d’utiliser cette notation, consultez la documentation de la version disponible sur le serveur.
Les fichiers système, comme /etc/crontab, comportent en plus un champ utilisateur avant la commande. Ne copiez pas leurs entrées telles quelles dans votre crontab personnelle.
Comment créer une première tâche cron ?
Sur un serveur où cron est installé et où vous avez accès au terminal, vous pouvez suivre la procédure ci-dessous. Les chemins sont donnés à titre d’exemple : remplacez-les par les emplacements réels sur votre compte.
Testez la commande manuellement. Exécutez
/usr/bin/python3 /home/jean/scripts/rapport.pyavec le même utilisateur que celui qui exécutera la tâche.Ouvrez le calendrier avec la commande
crontab -e.Ajoutez une entrée qui enregistre la sortie dans un fichier :
30 2 * * * /usr/bin/python3 /home/jean/scripts/rapport.py >> /home/jean/journaux/rapport.log 2>&1Enregistrez les modifications et vérifiez les entrées avec la commande
crontab -l.Après l’heure prévue, vérifiez le résultat, par exemple le rapport créé, ainsi que le contenu du fichier journal.
L’opérateur >> ajoute les messages à la fin du fichier, et 2>&1 y redirige également les messages d’erreur. Le répertoire journaux doit déjà exister et être accessible en écriture à l’utilisateur de la tâche. Le journal peut grossir indéfiniment : pour un usage régulier, il faut donc limiter sa taille ou mettre en place une rotation, c’est-à-dire archiver périodiquement les anciennes entrées et les supprimer.
Sur un hébergement mutualisé, le calendrier se configure souvent dans le panneau de gestion plutôt que dans le terminal. Consultez la documentation du fournisseur pour confirmer l’intervalle minimal entre les exécutions, les interpréteurs disponibles et les limites de durée d’exécution.
Pourquoi la tâche échoue-t-elle alors que la commande fonctionne manuellement ?
Cron lance les commandes dans un environnement plus restreint que celui d’un terminal interactif. Il peut ne pas disposer des mêmes variables d’environnement, chemins vers les programmes ou paramètres du shell. Utilisez donc des chemins complets et ne supposez pas que le répertoire de travail sera celui du script.
Si le programme doit être lancé depuis un répertoire précis, l’entrée peut prendre cette forme :
0 6 * * * cd /home/jean/application && /usr/bin/python3 rapport.py
Si la tâche ne produit aucun résultat, vérifiez dans l’ordre : le fonctionnement du service cron, le compte qui exécute la tâche, les permissions, les chemins, les variables requises, puis les journaux du système et de l’application. L’absence de message d’erreur ne prouve pas la réussite : le script doit signaler les échecs et permettre de vérifier le résultat obtenu.
L’heure d’exécution dépend aussi du fuseau horaire configuré. Vérifiez-le sur le serveur ou dans le panneau de l’hébergeur, surtout si vous attendez une exécution à l’heure polonaise. Lors des changements d’heure, le comportement des tâches prévues pendant une heure supprimée ou répétée dépend de l’implémentation.
Quelles sont les limites de cron ?
En règle générale, cron classique ne rattrape pas les exécutions manquées pendant l’arrêt du serveur. Il n’empêche pas non plus automatiquement le chevauchement des tâches : si un script dure 20 minutes et démarre toutes les 10 minutes, deux instances peuvent s’exécuter simultanément. Pour les opérations portant sur des données partagées, utilisez un verrou, par exemple le mécanisme flock disponible sur de nombreux systèmes Linux.
Pour les tâches qui doivent rattraper les exécutions manquées, vous pouvez envisager anacron ou des timers systemd configurés en conséquence. Si vous devez mettre les opérations en file d’attente et relancer celles qui échouent, une file de tâches peut être une meilleure solution.
Ne confondez pas non plus le cron du système avec WP-Cron dans WordPress. Par défaut, WP-Cron vérifie les tâches planifiées lors des requêtes adressées au site : leur exécution peut donc être retardée si le trafic est faible.
Commencez par automatiser une tâche non critique, en conservant un journal des résultats. Ne confiez à cette automatisation la suppression de données ou les sauvegardes qu’après avoir vérifié son résultat réel.
À lire aussi : Qu’est-ce que la 2FA ?
