Ne manquez pas nos offres limitées !

Cron job expliqué : syntaxe, planification et meilleurs cas d’utilisation

Cron job expliqué : syntaxe, planification et meilleurs cas d’utilisation

Un cron job est un planificateur basé sur le temps dans les systèmes d’exploitation de type Unix, tels que Linux et macOS. Il automatise les tâches répétitives telles que les sauvegardes, la maintenance du système et l’exécution de scripts.

Les utilisateurs définissent un calendrier et une commande dans un fichier crontab pour que les processus critiques s’exécutent en permanence en arrière-plan sans intervention manuelle.

Pour utiliser cron de manière efficace, vous devez comprendre ses principaux composants :

  • Syntaxe et opérateurs. Cron utilise cinq champs temporels (minute, heure, jour du mois, mois et jour de la semaine) et des caractères spéciaux, tels que des astérisques et des barres obliques, pour définir les intervalles.
  • Configuration. Les utilisateurs gèrent les planifications à l’aide de la commande crontab ou en plaçant des scripts dans des répertoires système spécifiques.
  • Permissions. Les fichiers cron.allow et cron.deny contrôlent l’accès et contribuent à maintenir la sécurité du système.
  • Application pratique. Les cas d’utilisation les plus courants sont l’automatisation des sauvegardes de bases de données, le nettoyage des caches de serveurs et l’envoi de rapports périodiques par courrier électronique.

Qu’est-ce qu’un cron job ?

Un cron job est un utilitaire qui permet aux utilisateurs de Linux et d’Unix d’exécuter automatiquement des commandes ou des scripts à une date et une heure précises. Au lieu d’exécuter une commande manuellement chaque jour ou chaque semaine, vous la planifiez une fois, et le système l’exécute en arrière-plan à l’heure définie.

Cette automatisation est importante pour la gestion des serveurs. Par exemple, un administrateur système qui gère un serveur privé virtuel (VPS) ne peut pas sauvegarder manuellement les bases de données tous les soirs à 3 heures du matin.

Un cron job se charge de cette tâche de manière fiable, améliorant ainsi l’efficacité et réduisant les erreurs humaines.

Les cas d’utilisation les plus courants des cron jobs sont les suivants :

  • Maintenance du système. Suppression des fichiers temporaires, rotation des fichiers journaux ou effacement des données mises en cache pour libérer de l’espace disque.
  • Gestion des données. vidage des bases de données MySQL dans un dossier de sauvegarde ou synchronisation des fichiers entre des serveurs distants.
  • Notifications. Envoi de courriels automatisés, vérification des mises à jour du système, surveillance de l’utilisation du disque et alerte des administrateurs en cas de manque d’espace.
  • Applications web. Déclenchement de scripts PHP pour des tâches telles que la distribution de lettres d’information ou le renouvellement d’abonnements.

Comment fonctionne un cron job ?

Un cron job est exécuté par le démon cron (crond), un service d’arrière-plan qui fonctionne en continu et exécute les commandes définies dans les fichiers de la table cron (crontab).

Toutes les minutes, le démon vérifie les fichiers de configuration et détermine si des tâches sont programmées pour être exécutées à ce moment-là.

Il est important de faire la distinction entre les deux types de fichiers de configuration :

  • Crontab du système. Situé dans le fichier /etc/crontab, ce fichier gère les tâches de l’ensemble du système et seuls les utilisateurs root peuvent le modifier. Il comprend un champ supplémentaire qui spécifie l’utilisateur qui exécute la commande.
  • Crontab de l’utilisateur. Chaque utilisateur dispose de son propre fichier crontab. L’emplacement de stockage varie selon la distribution, par exemple /var/spool/cron/crontabs/ sur Debian et Ubuntu et /var/spool/cron/ sur RHEL, CentOS et Fedora. Les utilisateurs modifient ces fichiers à l’aide de la commande crontab -e, et les tâches sont exécutées avec les autorisations de l’utilisateur.

Comprendre la syntaxe et les opérateurs de la crontab

La syntaxe Crontab définit les tâches planifiées (cron jobs) en utilisant une seule ligne avec cinq champs d’heure et de date suivis de la commande à exécuter. Les opérateurs spéciaux ajoutent de la souplesse lorsque vous définissez des intervalles de temps.

Voici le format de base d’une entrée de crontab :

minute heure jour_du_mois mois jour_de_la_semaine commande_à_exécuter

Les cinq champs de planification (minute, heure, date)

Les cinq champs de planification définissent le moment où un cron job s’exécute. Le système lit le programme dans l’ordre suivant :

Champ DescriptionValeurs autorisées
Minute La minute de l’heure à laquelle la commande est exécutée.0–59
Heure L’heure du jour au format 24 heures.0–23
Jour du mois La date spécifique du mois.1–31
Mois Le mois de l’année.1-12 ou JAN-DEC
Jour de la semaine Le jour de la semaine.0-6, où dimanche = 0 (ou 7 sur certains systèmes)

Important ! Soyez prudent lorsque vous planifiez des tâches sur plusieurs serveurs situés dans des fuseaux horaires différents. Vérifiez toujours l’heure locale de chaque serveur à l’aide de la commande date pour confirmer que votre configuration est correcte.

Opérateurs Crontab

Les opérateurs Crontab vous permettent de définir des intervalles et des modèles complexes dans les champs de synchronisation. Cronie et son prédécesseur, Vixie cron, prennent en charge huit opérateurs.

Ces implémentations servent d’outils cron par défaut sur la plupart des distributions Linux, notamment Ubuntu, Debian, RHEL, CentOS et Fedora :

  • Astérisque (*). Représente toutes les valeurs possibles. Par exemple, un astérisque dans le champ “minute” signifie que la tâche s’exécute chaque minute.
  • Virgule (,). Spécifie une liste de valeurs uniques. Par exemple, 1,5 dans le champ du jour de la semaine exécute la tâche le lundi et le vendredi.
  • Trait d’union (-). Définit une plage de valeurs. Par exemple, 6-9 dans le champ du mois exécute la tâche de juin à septembre.
  • Barre oblique (/). Spécifie les valeurs de pas ou les incréments. Par exemple, */12 dans le champ de l’heure exécute la commande toutes les 12 heures.

Ces opérateurs ne sont pas pris en charge par le système Linux cron standard. Ils ne fonctionnent qu’avec des programmateurs basés sur Java, tels que Quartz et Spring Boot, ou des services cloud comme AWS EventBridge :

  • Last (L). Spécifie le dernier jour du mois ou la dernière occurrence d’un jour de semaine.
  • Weekday (W). Recherche le jour de semaine (lundi-vendredi) le plus proche d’une date donnée.
  • Hash (#). Spécifie la nième occurrence d’un jour de semaine, par exemple le deuxième lundi du mois.
  • Point d’interrogation (?). Indique que le jour du mois ou le jour de la semaine n’a pas d’importance.

💡Conseil de pro

La plupart des implémentations de cron vous permettent de combiner des plages avec des valeurs d’étape. Par exemple, 1-20/2 exécute une tâche toutes les deux minutes pendant les 20 premières minutes.

Exemples de cron jobs

Les exemples suivants montrent comment appliquer la syntaxe crontab à des tâches réelles.

Syntaxe de cronObjectif Explication
0 0 * * 0 /root/backup.shSauvegarde hebdomadaireExécute le script de sauvegarde tous les dimanches à minuit.
0 * * * 1 /root/clearcache.shMaintenance du serveurVide le cache toutes les heures, mais seulement le lundi.
0 6,18 * * * /root/db-dump.shSnapshot de la base de donnéesVide la base de données deux fois par jour, à 6 heures du matin et à 6 heures du soir.
*/10 * * * * /scripts/monitor.shSurveillance du temps de fonctionnementExécute un script de surveillance toutes les 10 minutes.
0 0 1,15 * * /scripts/payroll.phpTâche bimensuelleExécute un script de paie le 1er et le 15 de chaque mois à minuit.
30 2 * * * /usr/bin/apt updateMise à jour du systèmeVérifie les mises à jour des paquets tous les jours à 2h30 du matin, heure à laquelle le trafic est généralement faible.
* * * * /scripts/s1.sh; /scripts/s2.shTâches multiplesExécute plusieurs commandes dans une seule tâche cron en les séparant par un point-virgule.
0 8 1-7 * * [ “$(date ‘+\%u’)” = “1” ] && /scripts/report.shRapport mensuelGénère un rapport à 8 heures du matin les jours 1 à 7 du mois, mais n’exécute le script que lorsqu’il s’agit d’un lundi.

Que sont les chaînes spéciales des cron jobs ?

Les chaînes spéciales sont des raccourcis qui commencent par @ et remplacent la syntaxe à cinq champs. Ils améliorent la lisibilité des programmes courants et réduisent le risque d’erreurs de syntaxe.

  • @reboot. Exécute la commande une fois au démarrage du démon cron.
  • @hourly. S’exécute une fois par heure (équivalent à 0 * * * *).
  • @daily (ou @midnight). S’exécute une fois par jour à minuit (équivalent à 0 0 * * *).
  • @weekly. S’exécute une fois par semaine le dimanche à minuit (équivalent à 0 0 * * 0).
  • @monthly. S’exécute une fois par mois, le 1er à minuit (équivalent à 0 0 1 * *).
  • @yearly (ou @annually). S’exécute une fois par an, le 1er janvier (équivalent à 0 0 1 1 *).

Voici quelques exemples de cron job utilisant des chaînes spéciales :

@daily /home/user/scripts/daily-cleanup.sh
@reboot /usr/local/bin/start-my-app.sh
@hourly /var/www/html/monitor.php

Important ! La directive @reboot s’exécute lorsque le démon cron démarre, pas nécessairement lorsque le système démarre. Si vous arrêtez et redémarrez le service cron sans redémarrer le système, les tâches @reboot s’exécutent à nouveau.

Autorisations Cron

Les administrateurs système contrôlent qui peut programmer des cron jobs à l’aide de deux fichiers dans le répertoire /etc/ : cron.allow et cron.deny.

  • cron.allow. Si ce fichier existe, seuls les utilisateurs qui y figurent peuvent créer, modifier ou exécuter des cron jobs. Le système bloque tous les autres utilisateurs.
  • cron.deny. Si le fichier cron.allow n’existe pas, le système vérifie ce fichier à la place. Les utilisateurs listés ici ne peuvent pas utiliser cron, alors que tous les autres utilisateurs le peuvent.

Si aucun fichier n’existe, le comportement par défaut dépend de la distribution :

  • Debian et Ubuntu. Tous les utilisateurs peuvent utiliser cron par défaut.
  • RHEL, CentOS et Fedora. Par défaut, seul root peut utiliser cron.

Vérifiez toujours la documentation de votre distribution ou testez l’accès à cron avec un utilisateur non root.

Par exemple, pour autoriser uniquement un administrateur de base de données (dbadmin) à planifier des tâches, créez un fichier cron.allow et ajoutez-y dbadmin. Cette configuration empêche les autres utilisateurs d’exécuter des tâches d’arrière-plan non autorisées qui consomment des ressources système.

Comment configurer un cron job

Pour configurer un cron job, ouvrez le terminal de votre machine, confirmez que cron est installé, créez ou modifiez un fichier crontab avec crontab -e, et affichez vos tâches planifiées avec crontab -l.

Certaines tâches peuvent nécessiter des privilèges élevés ou des privilèges de super-utilisateur, ou vous pouvez avoir besoin de placer des scripts dans des répertoires système pour des tâches récurrentes.

1. Accéder au terminal ou au SSH

Pour gérer les cron jobs, accédez à la ligne de commande de votre serveur. Si vous utilisez un serveur distant ou un VPS, connectez-vous via SSH avec un client tel que PuTTY sous Windows ou Terminal sous macOS ou Linux.

Les utilisateurs de VPS Hostinger peuvent également utiliser la fonction de terminal de navigateur disponible dans le tableau de bord VPS de hPanel.

2. Installer cron

La plupart des distributions Linux incluent cron par défaut. Pour confirmer qu’il est installé et qu’il fonctionne, vérifiez l’état du service :

systemctl status cron

Si le service est manquant, installez-le avec votre gestionnaire de paquets.

  • Pour Ubuntu et Debian :
sudo apt update
sudo apt install cron
  • Pour RHEL, CentOS et Fedora :
sudo dnf install cronie
sudo systemctl enable crond
sudo systemctl start crond

3. Créer ou modifier un fichier crontab

La principale façon de planifier des tâches est d’utiliser la commande crontab. Pour créer un nouveau fichier crontab ou modifier un fichier existant, exécutez :

crontab -e

Si votre système n’a pas encore de fichier crontab pour votre utilisateur, cette commande en crée un automatiquement.

Si vous exécutez la commande pour la première fois, le système vous invite à choisir un éditeur de texte, tel que nano ou vim. nano est généralement plus facile pour les débutants.

Une fois le fichier ouvert, ajoutez votre tâche programmée sur une nouvelle ligne.

💡 Conseil de pro

Avant de programmer un cron job, testez votre script manuellement pour vous assurer qu’il fonctionne. Exécutez le script directement via SSH, par exemple ./backup.sh. S’il ne s’exécute pas manuellement, il ne s’exécutera pas non plus via cron.

4. Afficher les tâches programmées

Pour afficher les tâches cron programmées pour votre compte utilisateur sans les modifier, utilisez l’indicateur de liste :

crontab -l

Pour afficher les cron jobs d’un utilisateur spécifique, exécutez la commande suivante et remplacez nom d’utilisateur par le nom de compte approprié. Notez que cette opération nécessite les privilèges de l’administrateur (root) ou d’un utilisateur expérimenté.

sudo crontab -u nomutilisateur -l

5. Accorder l’accès root si nécessaire

Certaines commandes, telles que les mises à jour du système ou les modifications des fichiers de configuration du système, requièrent les privilèges de l’administrateur (root). La manière la plus simple de programmer ces tâches est de les ajouter à la crontab de l’utilisateur root :

sudo crontab -e

Toute commande figurant dans la crontab de root s’exécute avec les privilèges de root et ne nécessite aucune configuration supplémentaire.

Important ! Évitez d’exécuter des tâches en tant que root, sauf en cas de nécessité. Si un script ne doit accéder qu’à des fichiers ou des répertoires spécifiques, envisagez d’ajuster la propriété des fichiers à l’aide de la commande chown ou d’utiliser plutôt un compte de service dédié.

6. Utiliser des répertoires cron pour les scripts récurrents

Pour les scripts de maintenance générale qui n’ont pas besoin d’être exécutés à une minute précise, vous pouvez les placer dans des répertoires système prédéfinis. Le système exécute automatiquement les scripts exécutables trouvés dans ces emplacements :

  • /etc/cron.hourly/
  • /etc/cron.daily/
  • /etc/cron.weekly/
  • /etc/cron.monthly/

Pour s’exécuter correctement, les scripts contenus dans ces répertoires doivent disposer des droits d’exécution et respecter les règles de dénomination des parties d’exécution :

  • Les noms de fichiers ne peuvent contenir que des lettres majuscules et minuscules, des chiffres, des caractères de soulignement (_) et des traits d’union ().
  • Les noms de fichiers ne doivent pas utiliser d’extensions de fichiers. Par exemple, un script nommé backup.sh sera ignoré. Renommez-le plutôt en backup.
  • Les noms de fichiers ne doivent pas contenir de points (.). Par exemple, mon.script échouera silencieusement, ce qui est une source fréquente d’erreurs.

7. Supprimer des tâches programmées

Pour supprimer toutes les cron jobs de l’utilisateur actuel, utilisez l’option remove :

crontab -r

Comme cette commande supprime instantanément toutes les entrées, il est plus sûr de la combiner avec l’option interactive (-i). Cette option demande une confirmation avant de supprimer toutes les tâches planifiées :

crontab -ri

Important ! L’indicateur -i ne fonctionne que lorsqu’il est utilisé avec -r. L’exécution de crontab -i en elle-même n’a aucun effet.

Quelle est l’étape suivante après la programmation de cron jobs ?

Les cron jobs automatisent les tâches récurrentes en combinant le démon cron (qui s’exécute en continu), le fichier crontab (qui définit le calendrier) et la commande qui exécute la tâche. Cette automatisation est essentielle pour une gestion efficace du système et pour traiter les tâches de routine sans intervention manuelle.

Cependant, les cron jobs ne sont aussi puissantes que les scripts qu’elles exécutent. Le démon cron déclenche des commandes à des heures précises, mais c’est votre script qui fait le travail proprement dit. Et si le script contient des erreurs, la tâche échouera même si le cron job s’exécute avec succès.

Apprendre à écrire des scripts Bash efficaces vous permet d’automatiser des tâches complexes et utiles via cron. Pour commencer, consultez notre tutoriel sur les scripts Bash.

Tout le contenu des tutoriels de ce site est soumis aux normes éditoriales et aux valeurs rigoureuses de Hostinger.

Author
L'auteur

Ismail

Ismail est un spécialiste du référencement et de la localisation chez Hostinger. Il est passionné par la technologie et le développement web et possède des années d'expérience dans le domaine informatique. Ses passe-temps incluent les jeux vidéo et le football.

Ce que disent nos clients

Commentaires

Author
thierry

June 29 2022

Bonjour Ismael, J'ai un petit problème je dois installer cette tache et je ne sais pas comment m'y prendre To Setup Crontab In order to run SuiteCRM Schedulers, edit your web server user's crontab file with this command: sudo crontab -e -u u73959030 ... and add the following line to the crontab file: * * * * * cd /homepages/36/d477259515/htdocs/medium; php -f cron.php > /dev/null 2>&1 You should do this only after the installation is concluded. MErci d avances, Thierry

Laissez une réponse

Veuillez remplir les champs obligatoires.Veuillez cocher la case de la confidentialité.Veuillez remplir les champs obligatoires et accepter la case de confidentialité.

Thank you! Your comment has been successfully submitted. It will be approved within the next 24 hours.