Cron job : exécution automatique des tâches

Que répondre à la question « Qu’est-ce qu’un cron job ? » ? Premièrement : un « daemon ». Deuxièmement : un dieu. Tout du moins, si l’on s’en tient uniquement à la connotation du nom de cette fonction. À proprement parler, le terme « Cron » est une abréviation de « command run on notice », c’est-à-dire une « commande exécutée à date ». Mais l’abréviation peut tout autant évoquer Chronos, le dieu du temps des Grecs anciens. Sur les systèmes d’exploitation Linux ou macOS, cette commande s’appelle « Cron-Daemon » (parfois aussi Cron-system).

Le jeu de mot sur le dieu grec du temps est d’ailleurs un excellent moyen mnémotechnique pour se souvenir de l’objet et de la fonction d’une tâche cron. Le système cron s’exécute en arrière-plan d’un système d’exploitation et peut effectuer automatiquement des tâches (jobs) planifiées à des moments définis. Si l’on associe le nom de système cron et le principe de tâches planifiées, on obtient donc le terme de cron jobs, ou tâches cron.

Découvrez plus en détails dans notre article ce qui se cache derrière ces tâches permettant d’optimiser les ressources, exécutées automatiquement et de manière répétée, et familiarisez-vous avec le fonctionnement du système.

Qu’est-ce qu’un cron job ?

Une tâche cron est une tâche exécutée automatiquement dans un système d’exploitation. Afin d’exécuter ces tâches, le système fournit régulièrement des commandes. Il peut parfaitement s’agir d’une simple tâche, mais, en règle générale, on utilise plusieurs tâches complexes, donc plusieurs cron jobs. Ces tâches ont le grand avantage de permettre un degré de personnalisation élevé.

Chaque tâche cron est composée de trois éléments :

  • Un script à exécuter ;
  • Une commande qui exécute régulièrement le script ;
  • Une action ou le log du script.

Un exemple concret d’utilisation de cette fonction ? Les tâches régulières d’un serveur. Ainsi, on peut, entre autres, lancer automatiquement l’envoi d’une newsletter, la collecte de statistiques ou le nettoyage de banques de données avec des tâches cron.

Tous les systèmes d’exploitation disposant d’un système cron, et donc d’un daemon cron, peuvent exécuter des cron jobs. C’est le cas de tous les systèmes Unix et BSD (Berkeley Software Distribution) comme macOS ou Linux.

Les systèmes d’exploitation peuvent exécuter des tâches selon la planification définie au préalable, exactement comme le prévoit leur dénomination « Command run on notice » (commande exécutée à date). Les tâches de routine peuvent ainsi se lancer de manière parfaitement automatisée. Outre la condition d’utiliser un système d’exploitation avec un daemon cron, il faut respecter d’autres prérequis pour pouvoir mettre en place des cron jobs :

Note

Il existe des interfaces utilisateur spéciales pour faciliter la mise en place des tâches cron, ainsi que des paquets d’hébergement Web contenant des cron jobs préconfigurés pour les projets Web. Pour gérer un hébergement Web à l’aide de tâches cron, nous vous conseillons la lecture de notre article d’aide sur les cron jobs.

Quelles tâches peut-on exécuter avec des cron jobs ?

Les tâches planifiées sont le plus souvent utilisées pour sauvegarder des données, et de loin. Par exemple, si vous souhaitez mettre en place une sauvegarde avec tar pour archiver vos données, les tâches cron seront parfaitement adaptées. Généralement, on les utilise aussi pour nettoyer des bases de données et exploiter les statistiques de visite des sites Web.

Les tâches cron peuvent être associées à un système de gestion de contenus pour envoyer automatiquement une newsletter ou surveiller les stocks des boutiques en ligne. Ces tâches permettent de contrôler le remplissage des serveurs et peuvent adapter automatiquement de nouvelles informations dans la description des produits, comme la moyenne des évaluations client.

Note

Les tâches automatisées des cron jobs sont si variées qu’il faut les employer à bon escient : elles consomment en effet beaucoup de ressources. Il faut donc bien évaluer la pertinence d’une tâche cron et ainsi que le moment de son exécution. Des scripts PHP adaptés permettent de s’assurer que les tâches cron s’exécutent uniquement lorsqu’elles ne perturbent pas d’autres processus.

Aperçu des tâches les plus importantes :

  • Nettoyage de banques de données : les entrées obsolètes sont supprimées, par exemple des commentaires datés ou des identifiants de connexion ayant expiré.
  • Création de statistiques : les tâches cron peuvent mettre à jour quotidiennement le nombre de visites sur une page, par exemple.
  • Actualisation du flux RSS : une tâche cron peut générer régulièrement un nouveau fichier XML.
  • Planification et publication de nouveaux contenus.
  • Envoi d’une newsletter : il est possible d’envoyer des emails à un instant précis.
  • Création de factures : à l’aide d’un cron job, on peut créer et envoyer automatiquement des factures (regroupées et à intervalles spécifiques).
  • Sauvegarde d’une base de données : la plupart du temps, pour des bases de données de petite taille n’excédant pas 20 MO.
  • Apprentissage automatique : les tâches cron peuvent alimenter une intelligence artificielle à un moment précis avec de nouvelles entrées.
  • Mises à jour : on peut planifier les mises à jour logicielles à un moment précis.

Quelle est la structure standard d’une commande cron ?

Les possibilités de personnalisation sont le grand avantage des cron jobs. Pour adapter une tâche planifiée cron, l’utilisateur dispose d’une base de trois variables qui doivent être systématiquement renseignées :

  1. PATH : affiche le chemin d’accès à la commande ou au script ;
  2. SHELL : indique l’interpréteur de commandes à utiliser pour exécuter le script ;
  3. MAILTO : renseigne l’utilisateur à qui il faut envoyer les résultats de la tâche cron ; en règle générale, l’abonné.

Avec ces trois variables fixes, auxquelles peuvent venir s’ajouter d’autres, les utilisateurs peuvent définir eux-mêmes leurs propres cron jobs. Généralement, on utilise des scripts SHELL, PHP et PERP pour ces commandes.

Note

Pour plus de renseignements sur les commandes sous Linux et autres, consultez notre article de fond consacré aux commandes Linux.

Comment fonctionne un cron job ?

Pour qu’une tâche cron puisse exécuter ce qu’on attend d’elle, il faut tout d’abord fournir une commande. Ensuite, le daemon cron s’exécute en arrière-plan et effectue des tâches non interactives. Sous Windows, c’est ce qu’on appelle en général un « service ».

Les tâches cron sont, par principe, au repos, et attendent de recevoir une commande : ou bien directement du système d’exploitation, ou bien d’un autre ordinateur en réseau. La commande est transmise par le biais d’un fichier cron (un simple fichier texte), qui planifie la tâche pour un instant donné.

Les tâches cron sont définies et configurées dans un tableau appelé crontab. Ce tableau liste les temps à respecter et la suite de commandes à exécuter.

Note

Le programme permettant d’éditer chaque tâche cron s’appelle aussi « crontab ».

Le fichier système standard Crontab « crontab » est placé dans le répertoire /etc/cron.*/.

Hébergement Web avec conseiller personnel !

Hébergement Web puissant, flexible et performant avec boîte email, conseiller personnel et domaine inclus la 1ère année !

Domaine
Certificat SSL
Assistance 24/7

Quatre exemples de cron jobs simples

Avec le logiciel crontab, on peut éditer des crontabs. Voici la commande correspondante :

crontab -e

La syntaxe est relativement claire. Ainsi, chaque cron job respecte le format suivant :

*     *     *     *     * Commande à exécuter
-      -      -      -     -
|     |     |     |     |
|     |     |     |     +----- Jour de la semaine (0 - 7) (Dimanche correspond à 0 et 7)
|     |     |     +------- Mois (1 - 12)
|     |     +--------- Jour (1 - 31)
|     +----------- Heure (0 - 23)
+------------- Minute (0 - 59)

Ici, l’étoile * indique que la tâche cron doit être exécutée le jour, le mois, à l’heure ou à la minute donnés. Pour les jours de la semaine et les mois, on peut utiliser les trois premières lettres en anglais, par exemple sun pour dimanche. Ce format de notation ne permet pas d’effectuer des tâches dans un intervalle de temps donné.

Pour planifier précisément un intervalle, il faut remplacer les étoiles par des chiffres. En remplaçant la première étoile par 8-10, la commande sera exécutée pendant les minutes 8, 9 et 10. Si, à l’inverse, on inscrit */2, la commande sera exécutée toutes les deux minutes. On peut combiner ces deux fonctions. Au total, on peut utiliser trois valeurs de temps pour les cinq premières étoiles :

  • * = exécuter à tout moment (à chaque indication)
  • */n = exécuter tous les n
  • n,x,y = exécuter le/à n,x,y

Exemple 1 : cron job pour exécuter une sauvegarde

Pour exécuter une sauvegarde tous les matins à 6 heures, rédigez la commande suivante :

0 6 * * * /usr/bin/backup.sh

Exemple 2 : jouer un son toutes les 30 minutes

On peut aussi utiliser les tâches cron pour jouer un son à intervalles réguliers :

*/30 * * * * /usr/bin/play_sound.sh

Exemple 3 : email de rappel

Le cron job suivant envoie un email de rappel à 8 heures et 18 heures :

0 8,18 * * * /usr/bin/send_reminder_mail.sh

Exemple 4 : Merci, Admin

On peut aussi utiliser une tâche cron pour ne jamais oublier le jour de présence de l’administrateur système :

0 0 30 07 * (echo "Merci à tous les admins système" | mail -s "Un admin ne dort pas, il root." user@domain.xy)