Android

Planification des tâches cron avec crontab

Tuto: Programmer des tâches avec cron et la crontab

Tuto: Programmer des tâches avec cron et la crontab

Table des matières:

Anonim

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 un travail 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. Certaines applications, telles que Drupal ou Magento, nécessitent des tâches cron pour effectuer certaines tâches.

Les tâches cron peuvent être planifiées pour s'exécuter par minute, heure, jour du mois, mois, jour de la semaine ou toute combinaison de ces éléments.

Qu'est-ce que le fichier Crontab

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

Les fichiers crontab des utilisateurs sont stockés par leur nom et leur emplacement varie en fonction des systèmes d'exploitation. Dans un système basé sur Red Hat tel que CentOS, les fichiers crontab sont stockés dans le répertoire /var/spool/cron tandis que sur Debian et les fichiers Ubuntu sont stockés dans le répertoire /var/spool/cron/crontabs .

Bien que vous puissiez modifier les fichiers crontab utilisateur manuellement, il est recommandé d'utiliser la commande crontab .

/etc/crontab et les fichiers à l'intérieur du répertoire /etc/cron.d 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 les /etc/cron.{hourly, daily, weekly, monthly} 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 vous permet de spécifier une liste de valeurs pour la répétition. 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 de tiret 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 de 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 devant l'opérateur de 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 fichiers crontabs utilisateur. Il contient un champ utilisateur obligatoire supplémentaire qui spécifie quel utilisateur exécutera le travail cron.

* * * * * command(s) * * * * * 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 (or @annually ) - Exécutez la tâche spécifiée une fois par an à minuit (00h00) du 1er janvier. Équivalent à 0 0 1 1 * . @monthly - Exécute la tâche spécifiée une fois par mois à minuit le premier jour du mois. Équivalent à 0 0 1 * * . @weekly - Exécute la tâche spécifiée une fois par semaine à minuit le dimanche. Équivalent à 0 0 * * 0 . @daily - Exécute la tâche spécifiée une fois par jour à minuit. Équivalent à 0 0 * * * . @hourly - Exécute la tâche spécifiée une fois par heure au début de l'heure. Équivalent à 0 * * * * . @reboot - Exécute la tâche spécifiée au démarrage du système (au démarrage).

Commande Linux Crontab

La commande crontab vous permet d'installer ou d'ouvrir un fichier crontab pour le modifier.

Vous pouvez utiliser la commande crontab pour afficher, ajouter, supprimer ou modifier des tâches cron à l'aide des options suivantes:

  • crontab -e - Modifier le fichier crontab, ou en créer un s'il n'existe pas déjà. crontab -l - Affiche le contenu du fichier crontab. crontab -r - Supprime votre fichier crontab actuel. crontab -i - Supprimez votre fichier crontab actuel avec une invite avant la suppression. crontab -u - Modifier un autre fichier crontab d'utilisation. Nécessite des privilèges d'administrateur système.

La commande crontab ouvre le fichier crontab à l'aide de l'éditeur spécifié par les variables d'environnement VISUAL ou EDITOR .

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 appelez est présente dans le chemin spécifié par cron, vous pouvez utiliser le chemin absolu de la commande ou modifier la variable cron $PATH . Vous ne pouvez pas implicitement ajouter :$PATH comme vous le feriez avec un script normal. Le shell par défaut est défini sur /bin/sh . Vous pouvez définir un autre shell en changeant la variable SHELL appelle la commande à partir du répertoire personnel de l'utilisateur. La variable HOME peut être remplacée par des paramètres dans la crontab. La notification par e-mail est envoyée au propriétaire de la crontab. Pour remplacer le comportement par défaut, vous pouvez utiliser la variable d'environnement MAILTO avec une liste (séparée par des virgules) de toutes les adresses électroniques auxquelles vous souhaitez recevoir les notifications par courrier électronique. Si MAILTO est défini mais vide ( MAILTO="" ), aucun courrier n'est envoyé.

Restrictions Crontab

Les administrateurs système peuvent contrôler quels utilisateurs ont accès à la commande crontab en utilisant les fichiers /etc/cron.deny et /etc/cron.allow . Les fichiers se composent d'une liste de noms d'utilisateurs, un nom d'utilisateur par ligne.

Par défaut, seul le fichier /etc/cron.deny 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 fichier /etc/cron.allow existe, seuls les utilisateurs répertoriés dans ce fichier peuvent utiliser la commande crontab .

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

Exemples de tâches Cron

Vous trouverez ci-dessous quelques exemples de tâches cron qui vous montreront comment planifier une tâche à exécuter 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 spécifiée:

    [email protected] */5 * * * * /path/to/script.sh > /dev/null

    Exécutez deux commandes chaque lundi à 15 heures (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, à l'heure, de 8 h à 16 h:

    00 08-16 * * * /path/to/script.sh

    Exécutez un script le premier lundi de chaque mois, à 7 h.

    0 7 1-7 * 1 /path/to/script.sh

    Exécutez le script à 21h15, les 1er et 15 de chaque mois:

    15 9 1, 15 * * /path/to/script.sh

    Définissez des variables HOME , PATH , SHELL et MAILTO 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

Vous avez appris à créer des tâches cron et à planifier des tâches à une date et une heure spécifiques.

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

terminal cron crontab