GNU/Linux >> Tutoriels Linux >  >> Linux

Planifier des tâches Cron avec Crontab

Cron est un démon de planification qui exécute des tâches à des intervalles spécifiés. Ces tâches sont appelées tâches cron et sont principalement utilisées pour automatiser la maintenance ou l'administration du système.

Par exemple, vous pouvez définir une tâche cron pour automatiser les tâches répétitives telles que la sauvegarde de bases de données ou de données, la mise à jour du système avec les derniers correctifs de sécurité, la vérification de l'utilisation de l'espace disque, l'envoi d'e-mails, etc.

Les tâches cron peuvent être programmées pour s'exécuter par minute, heure, jour du mois, mois, jour de la semaine ou toute combinaison de ceux-ci.

Qu'est-ce que le fichier Crontab #

Crontab (table cron) est un fichier texte qui spécifie le calendrier des tâches cron. Il existe deux types de fichiers crontab. Les fichiers crontab à l'échelle du système et les fichiers crontab des utilisateurs individuels.

Les fichiers crontab des utilisateurs sont nommés en fonction du nom de l'utilisateur et leur emplacement varie selon les systèmes d'exploitation. Dans les distributions basées sur Red Hat telles que CentOS, les fichiers crontab sont stockés dans le répertoire /var/spool/cron répertoire, tandis que sur Debian et Ubuntu, les fichiers sont stockés dans le répertoire /var/spool/cron/crontabs répertoire.

Bien que vous puissiez éditer manuellement les fichiers crontab de l'utilisateur, il est recommandé d'utiliser le crontab commande.

Le /etc/crontab fichier et les scripts à l'intérieur du /etc/cron.d répertoire sont des fichiers crontab à l'échelle du système qui ne peuvent être modifiés que par les administrateurs système.

Dans la plupart des distributions Linux, vous pouvez également placer des scripts dans le /etc/cron.{hourly,daily,weekly,monthly} répertoires, et les scripts seront exécutés toutes les hour/day/week/month .

Syntaxe et opérateurs Crontab #

Chaque ligne du fichier crontab utilisateur contient six champs séparés par un espace suivi de la commande à exécuter.

* * * * * command(s)
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)

Les cinq premiers champs peuvent contenir une ou plusieurs valeurs, séparées par une virgule ou une plage de valeurs séparées par un trait d'union.

  • * - L'opérateur astérisque signifie n'importe quelle valeur ou toujours. Si vous avez le symbole astérisque dans le champ Heure, cela signifie que la tâche sera effectuée toutes les heures.
  • , - L'opérateur virgule permet de spécifier une liste de valeurs à répéter. Par exemple, si vous avez 1,3,5 dans le champ Heure, la tâche s'exécutera à 1 h, 3 h et 5 h.
  • - - L'opérateur trait d'union vous permet de spécifier une plage de valeurs. Si vous avez 1-5 dans le champ Jour de la semaine, la tâche s'exécutera tous les jours de la semaine (du lundi au vendredi).
  • / - L'opérateur barre oblique vous permet de spécifier des valeurs qui seront répétées sur un certain intervalle entre elles. Par exemple, si vous avez */4 dans le champ Heure, cela signifie que l'action sera effectuée toutes les quatre heures. Cela revient à spécifier 0,4,8,12,16,20 . Au lieu d'un astérisque avant l'opérateur barre oblique, vous pouvez également utiliser une plage de valeurs, 1-30/10 signifie la même chose que 1,11,21 .

Fichiers Crontab à l'échelle du système #

La syntaxe des fichiers crontab à l'échelle du système est légèrement différente de celle des crontabs utilisateur. Il contient un champ utilisateur obligatoire supplémentaire qui spécifie quel utilisateur exécutera la tâche cron.

* * * * * <username> command(s)

Macros prédéfinies #

Il existe plusieurs macros de planification Cron spéciales utilisées pour spécifier des intervalles communs. Vous pouvez utiliser ces raccourcis à la place de la spécification de date à cinq colonnes.

  • @yearly (ou @annually ) - Exécute la tâche spécifiée une fois par an à minuit (00h00) le 1er janvier. Équivalent à 0 0 1 1 * .
  • @monthly - Exécutez la tâche spécifiée une fois par mois à minuit le premier jour du mois. Équivalent à 0 0 1 * * .
  • @weekly - Exécutez la tâche spécifiée une fois par semaine à minuit le dimanche. Équivalent à 0 0 * * 0 .
  • @daily - Exécutez la tâche spécifiée une fois par jour à minuit. Équivalent à 0 0 * * * .
  • @hourly - Exécuter la tâche spécifiée une fois par heure au début de l'heure. Équivalent à 0 * * * * .
  • @reboot - Exécuter la tâche spécifiée au démarrage du système (boot-time).

Commande Linux Crontab #

La crontab La commande vous permet d'installer, d'afficher ou d'ouvrir un fichier crontab pour le modifier :

  • crontab -e - Modifiez le fichier crontab ou créez-en un s'il n'existe pas déjà.
  • crontab -l - Afficher le contenu du fichier crontab.
  • crontab -r - Supprimez votre fichier crontab actuel.
  • crontab -i - Supprimez votre fichier crontab actuel avec une invite avant la suppression.
  • crontab -u <username> - Modifier un autre fichier crontab utilisateur. Cette option nécessite des privilèges d'administrateur système.

La commande crontab ouvre le fichier crontab en utilisant l'éditeur spécifié par le VISUAL ou EDITOR variables d'environnement.

Variables Crontab #

Le démon cron définit automatiquement plusieurs variables d'environnement.

  • Le chemin par défaut est défini sur PATH=/usr/bin:/bin . Si la commande que vous exécutez n'est pas présente dans le chemin spécifié par cron, vous pouvez soit utiliser le chemin absolu de la commande, soit modifier le cron $PATH variable. Vous ne pouvez pas ajouter implicitement :$PATH comme vous le feriez avec un script normal.
  • Le shell par défaut est défini sur /bin/sh . Pour changer de shell différent, utilisez le SHELL variables.
  • Cron invoque la commande depuis le répertoire personnel de l'utilisateur. Le HOME la variable peut être définie dans la crontab.
  • La notification par e-mail est envoyée au propriétaire de la crontab. Pour écraser le comportement par défaut, vous pouvez utiliser le MAILTO variable d'environnement avec une liste (séparée par des virgules) de toutes les adresses e-mail auxquelles vous souhaitez recevoir les notifications par e-mail. Lorsque MAILTO est défini mais vide (MAILTO="" ), aucun courrier n'est envoyé.

Restrictions Crontab #

Le /etc/cron.deny et /etc/cron.allow files vous permet de contrôler quels utilisateurs ont accès au crontab commande. Les fichiers consistent en une liste de noms d'utilisateur, un nom d'utilisateur par ligne.

Par défaut, seul le /etc/cron.deny Le fichier existe et est vide, ce qui signifie que tous les utilisateurs peuvent utiliser la commande crontab. Si vous souhaitez refuser l'accès aux commandes crontab à un utilisateur spécifique, ajoutez le nom d'utilisateur à ce fichier.

Si le /etc/cron.allow le fichier existe seuls les utilisateurs listés dans ce fichier peuvent utiliser le crontab commande.

Si aucun des fichiers n'existe, seuls les utilisateurs disposant de privilèges administratifs peuvent utiliser le crontab commande.

Exemples de tâches Cron #

Vous trouverez ci-dessous quelques exemples de tâches cron qui montrent comment planifier une tâche pour qu'elle s'exécute sur différentes périodes.

  • Exécutez une commande à 15h00 tous les jours du lundi au vendredi :

    0 15 * * 1-5 command
  • Exécutez un script toutes les 5 minutes et redirigez la sortie standard vers dev null , seule l'erreur standard sera envoyée à l'adresse e-mail indiquée :

    [email protected]
    */5 * * * * /path/to/script.sh > /dev/null
  • Exécutez deux commandes tous les lundis à 15h (utilisez l'opérateur && entre les commandes):

    0 15 * * Mon command1 && command2
  • Exécutez un script PHP toutes les 2 minutes et écrivez la sortie dans un fichier :

    */2 * * * * /usr/bin/php /path/to/script.php >> /var/log/script.log
  • Exécutez un script tous les jours, toutes les heures, toutes les heures, de 8 h 00 à 16 h 00 :

    00 08-16 * * * /path/to/script.sh
  • Exécutez un script le premier lundi de chaque mois, à 7h00

    0 7 1-7 * 1 /path/to/script.sh
  • Exécutez le script a à 21h15, les 1er et 15 de chaque mois :

    15 9 1,15 * * /path/to/script.sh
  • Définir HOME personnalisé , PATH , SHELL et MAILTO variables et exécutez une commande toutes les minutes.

    HOME=/opt
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    SHELL=/usr/bin/zsh
    [email protected]
    
    */1 * * * * command

Conclusion #

Cron est un démon qui vous permet de programmer des tâches à une date et une heure précises.

N'hésitez pas à laisser un commentaire si vous avez des questions.


Linux
  1. Planification des tâches avec la commande Linux cron

  2. Dépannage des tâches Cron

  3. Comment planifier des tâches Cron avec Crontab

  4. Cron avec notification-envoi

  5. Récupérer les tâches cron supprimées accidentellement avec crontab -r

Planification avec cron &At

Cron Jobs et Crontab sur Linux expliqués

Comprendre Crontab sous Linux avec des exemples

Commande Linux crontab pour créer et gérer des tâches Cron

Comment planifier des tâches avec Cron sous Linux

10 exemples cron utiles pour planifier des tâches sous Linux