Agence web » Actualités du digital » Qu'est-ce qu'un Cron Job et comment les utilisez-vous?

Qu'est-ce qu'un Cron Job et comment les utilisez-vous?

Tetiana Yurchenko / Shutterstock

le cron est utilisé pour exécuter des scripts et des commandes à intervalles réguliers et à des heures et des dates spécifiques. Il est intégré à la plupart des distributions Linux et fournit un moyen très utile de planifier des tâches sur votre serveur.

cron est un outil d'automatisation, donc tout ce que vous exécutez régulièrement peut probablement être basculé vers un travail cron. Si vous souhaitez effectuer des sauvegardes quotidiennes régulières ou redémarrer un service une fois par semaine, cron peut faire ça.

Comment fonctionne Cron?

Les tâches Cron sont définies dans un fichier appelé crontab. Ce fichier est unique pour chaque utilisateur et, bien qu'il se trouve généralement sous /var/spool/cron/crontabs, ils ne sont pas destinés à être modifiés directement. Au lieu de cela, vous les modifiez via le crontab commander:

crontab -e

Cela ouvrira la crontab de votre utilisateur dans votre éditeur de texte CLI par défaut. Si cela vous a bloqué dans vim, vous pouvez changer l'éditeur par défaut en exécutant select-editor sur certains systèmes, ou en ajoutant export VISUAL=micro; à ton ~/.bashrc (ou équivalent shell).

Par défaut, votre crontab est probablement vide, vous devrez donc ajouter des travaux manuellement. Un travail cron est généralement formaté comme suit:

minute hour day month weekday  

La commande à exécuter peut être n'importe quoi, y compris des scripts shell

Les valeurs de chaque variable de temps peuvent être des caractères génériques, que cron interprétera comme toujours vrais. Par exemple, si vous souhaitez exécuter un travail quinze minutes après chaque heure, chaque jour, vous devez utiliser:

15 * * * * command

Cela se déroulera à la minute 15 de chaque heure, chaque jour, chaque mois, quel que soit le jour de la semaine.

Si vous souhaitez exécuter un travail à 17h30 tous les vendredis, vous devez utiliser:

30 17 * * 5 command

cron prend également en charge les valeurs échelonnées et échelonnées. Les valeurs échelonnées incluent chaque valeur dans une plage spécifique. Si vous souhaitez exécuter un travail toutes les heures pendant que vous travaillez, vous devez utiliser:

0 9-17 * * 1-5 command

De 9 h à 17 h, du lundi au vendredi. De même, vous pouvez définir une liste de valeurs en les séparant par des virgules.

Les valeurs échelonnées s'exécutent à des intervalles plus spécifiques. Vous pouvez exécuter des travaux toutes les deux heures en utilisant:

0 */2 * * * command

Gardez à l'esprit que l'horloge commence à minuit, 00h00. Votre travail s'exécutera alors une fois, puis à 2 heures du matin, puis à 4 heures du matin, etc.

Quelques versions de cron prendre en charge plus de syntaxe, comme @daily à courir une fois par jour, ou @reboot pour s'exécuter à chaque redémarrage, bien que votre distribution puisse varier.

Si vous voulez un moyen simple de déboguer cron syntaxe, il existe de nombreux éditeurs en ligne tels que crontab.guru qui vous montreront ce que signifie votre expression de calendrier en termes simples, c'est-à-dire "À minute 0 passé toutes les 2 heures. "

S'assurer que Cron fonctionne

Cron ne vous montre aucune indication qu'il exécute vos travaux. Si vous souhaitez savoir si cela fonctionne, vous devrez rediriger la sortie manuellement. Vous pouvez le faire en redirigeant la sortie vers un fichier journal:

* * * * * echo "test" >> logfile 2>&1

le >> L'opérateur ajoute la sortie à un fichier et 2>&1 L'opérateur s'assure d'inclure stderr dans la sortie. L'équivalent bash serait simplement &>> à la place du >>, mais cela peut ne pas fonctionner sur toutes les distributions, car cron utilise /bin/sh par défaut.

Cron peut être configuré pour envoyer des e-mails avec la sortie des travaux. Il le fait en fait par défaut avec l'adresse e-mail par défaut de votre compte d'utilisateur, mais il n'est probablement pas configuré correctement. Pour que le courrier électronique fonctionne, vous aurez besoin d'un agent de messagerie installé et configuré sur votre serveur, qui vous permettra d'utiliser le mail commande pour envoyer des e-mails. Ensuite, placez cette ligne au-dessus de vos tâches cron dans votre tâche cron:

MAILTO="yourname@gmail.com"

Désormais, toute sortie d'un travail qui va vers la sortie standard (par exemple, il n'est pas canalisé quelque part) sera envoyée via mail à l'adresse que vous avez indiquée. Vous pouvez tester cela en ajoutant un travail temporaire à écho à stdout chaque minute:

* * * * * echo "cron mail is working!"

Assurez-vous simplement de désactiver ce travail une fois qu'il fonctionne, ou cela deviendra très ennuyeux très rapidement.

Cron utilise / bin / sh par défaut, pas Bash

Vous utilisez peut-être un shell différent de celui cron exécute vos travaux. Bash (/bin/bash) est un shell commun sur la plupart des distributions et est une implémentation de sh. le /bin/sh le fichier est un lien symbolique vers un sh mise en œuvre, mais ce n'est pas toujours bash. Sur les systèmes basés sur Debian comme Ubuntu et sur macOS, /bin/sh Liens vers dash par défaut.

Le résultat final de cette confusion est que vos scripts peuvent ne pas fonctionner de la même manière, et votre variable PATH (entre autres) peut ne pas être configurée correctement. Vous pouvez contourner cela de plusieurs manières, et la variante de votre distribution de cron peut fonctionner différemment, vous devrez donc peut-être en essayer quelques-uns:

  • Ajouter SHELL=/bin/bash au sommet de votre crontab. Vous devrez peut-être également ajouter BASH_ENV="/root/.bashrc" pour qu'il lise votre profil bash.
  • En mettant /bin/bash avant la commande dans chaque travail. Vous devrez peut-être définir BASH_ENV variable même si vous ne passez pas à bash globalement.
  • Utiliser le bash shebang #!/bin/bash en haut de chaque script. Cela vous oblige à avoir chaque travail dans son propre fichier de script.

Dans tous les cas, vous devez déboguer vos tâches cron en les configurant pour s'exécuter quelques minutes à l'avance avant de les considérer comme fiables.

Mise à jour manuelle de votre Crontab

Si vous préférez ne pas gérer votre crontab via crontab -e, il existe une meilleure méthode que vous pouvez utiliser. La commande crontab -l affichera le contenu de votre crontab, et vous pouvez le rediriger vers un fichier:

crontab -l > my_crontab

Ensuite, téléchargez ce fichier sur un autre système et «installez-le» avec:

crontab my_crontab

De cette façon, vous ne provoquerez aucune erreur en le modifiant directement, car il est toujours chargé via cron.

★★★★★