GNU/Linux >> Tutoriels Linux >  >> Linux

Planification des tâches système avec Cron sous Linux

Cron est un démon de planification qui exécute des tâches cron à des intervalles spécifiés. Les tâches cron automatisent la maintenance du système, les tâches répétitives ou administratives telles que la sauvegarde de bases de données ou de données, les mises à jour du système, la vérification de l'utilisation de l'espace disque, l'envoi d'e-mails, etc.

Vous pouvez programmer des tâches cron pour qu'elles s'exécutent à la minute, à l'heure, au jour de la semaine, au jour du mois, au mois ou à une combinaison de ces éléments.

Pourquoi Cron ?

  • Cron vous permet de contrôler l'exécution de votre travail ou de votre tâche. Par exemple, vous pouvez contrôler la minute d'exécution, l'heure, le jour, etc.
  • Les tâches Cron n'occupent pas de mémoire lorsqu'elles ne s'exécutent pas.
  • Il élimine le besoin d'écrire des boucles et du code logique pour la tâche.
  • Si une tâche ne s'exécute pas pour une raison quelconque, elle s'exécutera à nouveau au prochain intervalle de temps.

Installer et exécuter le démon cron

L'utilitaire cron sous Linux est installé avec le package cronie qui fournit les services cron.

Vérifiez si le paquet copain est installé ou non.

[tuts@fosslinux ~]$ rpm -q cronie
cronie-1.5.7-1.fc33.x86_64

Si le paquet cronie n'est pas présent, installez-le à l'aide de la commande suivante pour les utilisateurs de Fedora.

[tuts@fosslinux ~]$ sudo dnf install cronie

Avant de planifier des tâches, vous devez démarrer le service crond (démon cron).

Vérifiez si le service crond est en cours d'exécution ou non.

[tuts@fosslinux ~]$ systemctl status crond.service
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor pre>
Active: active (running) since Tue 2021-06-08 09:14:40 EAT; 2h 58min ago
Main PID: 1671 (crond)
Tasks: 1 (limit: 3448)
Memory: 14.4M
CPU: 316ms
CGroup: /system.slice/crond.service
└─1671 /usr/sbin/crond -n

Le service est en cours d'exécution si la commande indique ( Actif :actif (en cours d'exécution). Si le service crond n'est pas en cours d'exécution, démarrez-le dans la session en cours avec la commande suivante.

[tuts@fosslinux ~]$ systemctl start crond.service

Vous pouvez également configurer le service pour qu'il démarre et s'exécute automatiquement au démarrage avec la commande suivante.

[tuts@fosslinux ~]$ systemctl enable crond.service

Vous pouvez arrêter l'exécution du service crond à l'aide de la commande stop.

[tuts@fosslinux ~]$ systemctl stop crond.service

Vous pouvez également le redémarrer avec la commande restart :

[tuts@fosslinux ~]$ systemctl restart crond.service

Définir une tâche cron

Pour comprendre le fonctionnement des tâches cron, nous examinerons un exemple de tâche cron et les parties qui composent un fichier de configuration crontab.
Exemple :une tâche cron pour extraire les dernières modifications d'une branche principale git.

*/55 * * * *
username cd /home/username/project/shop_app && git pull origin master

La tâche cron ci-dessus est composée de deux parties clés :

  1.  La première partie (*/55 * * * * ) définit le minuteur pour qu'il s'exécute toutes les 55 minutes.
  2.  La deuxième partie de la configuration de la tâche cron définit les instructions telles qu'elles s'exécuteraient à partir de la ligne de commande. La commande s'exécutera en tant qu'utilisateur (nom d'utilisateur), puis changera le répertoire en (/home/nom d'utilisateur/projet/shop_app). La dernière partie exécutera la commande git pour extraire les dernières modifications dans la branche master de votre projet.

Utiliser crontab pour créer une tâche cron

En règle générale, vous n'êtes pas censé modifier directement les fichiers cron. Utilisez plutôt la commande crontab pour créer, modifier, installer, désinstaller ou répertorier les tâches cron en cours d'exécution sur votre système. Une fois que vous avez défini les tâches cron, elles s'exécutent en arrière-plan et le démon recherche en permanence de nouvelles tâches cron dans les répertoires /etc/crontab, /etc/cron.*/ et /var/spool/cron/.

Les distributions basées sur RedHat telles que Fedora stockent les fichiers crontab dans le répertoire /var/spool/cron, tandis que les distributions Debian et Ubuntu dans le répertoire /var/spool/cron/crontabs. Les fichiers et les scripts crontab à l'échelle du système sont stockés dans le fichier etc/crontab et le répertoire /etc/cron.d, respectivement.

Notez que vous n'avez pas besoin de redémarrer cron après avoir créé de nouveaux fichiers de configuration ou modifié ceux qui existent déjà.

Syntaxe et opérateurs de temps Crontab

La première partie d'une définition de tâche cron est l'information de synchronisation. Il détermine quand et à quelle fréquence la tâche cron sera exécutée. Il se compose de la minute, de l'heure, du jour du mois, du mois, du jour de la semaine dans cet ordre. Vous pouvez spécifier une ou plusieurs valeurs séparées par une virgule ou un trait d'union.

.---------------- minute (0 - 59)
| .------------- hour (0 - 23)
| | .---------- day of month (1 - 31)
| | | .------- month (1 - 12) OR jan,feb,mar,apr …
| | | | .---- day of week (0-6) (Sunday=0 or 7) OR sun,mon,tue,wed,thr,fri,sat
| | | | | 
| | | | | 
* * * * * username cron job command to be executed
  • * – Vous pouvez utiliser un astérisque à la place d'une valeur pour représenter toutes les valeurs possibles pour cette position lors de la définition du temps d'exécution. Par exemple, si vous utilisez un astérisque à la position des minutes, la tâche cron s'exécutera toutes les minutes.
  • – Une virgule spécifie une liste de valeurs à répéter. Par exemple, si vous spécifiez 2, 3, 6 dans le champ Heure, la tâche cron s'exécutera à 2 h, 3 h et 6 h.
  • – – Le trait d'union spécifie une plage de valeurs. Par exemple, si vous avez 2-6 dans le champ jour de la semaine, la tâche cron s'exécutera tous les jours de la semaine du mardi au samedi.
  • / – L'opérateur barre oblique spécifie les valeurs qui seront répétées sur un certain intervalle. Par exemple, */6 dans le champ de l'heure indique que la tâche cron s'exécutera toutes les six heures. Cela revient à spécifier 0,6,12,18.

Macros prédéfinies

Cron a plusieurs macros de planification spéciales que vous pouvez utiliser pour spécifier des intervalles communs. Vous pouvez les utiliser à la place des spécifications de date et d'heure.

  • @reboot – La tâche spécifiée est exécutée au démarrage du système.
  •  @annuellement ou @annuellement :la tâche spécifiée est exécutée une fois par an, le 1er janvier à minuit. Il est similaire à 0 0 1 1 *.
  • @monthly – La tâche est exécutée une fois par mois le premier jour du mois à minuit. Il est similaire à 0 0 1 * *.
  • @weekly - La tâche spécifiée est exécutée une fois par semaine à minuit le dimanche. Cela équivaut à 0 0 * * 0.
  • @daily – La tâche spécifiée est exécutée une fois par jour à minuit. Il est équivalent à 0 0 * * *.
  • @hourly – La tâche est exécutée une fois par heure au début de l'heure. Il est similaire à 0 * * * *.

Commande Crontab

La commande crontab vous permet d'installer, d'ouvrir ou d'afficher un fichier crontab.

Créez un fichier crontab ou ouvrez-en un existant avec la commande suivante :

$ crontab -e

La commande ouvrira l'éditeur vi par défaut et vous permettra de définir les tâches cron que vous souhaitez exécuter sur votre système.

Répertoriez toutes les tâches cron de votre système et affichez le contenu du fichier crontab :

$ crontab -l

Répertorier les tâches cron pour un utilisateur spécifique à l'aide de l'option -u :

$ crontab -u username -l

Supprimez toutes les tâches cron à l'aide de la commande -r :

$ crontab -r

Supprimez les tâches cron pour un utilisateur spécifique avec la commande -r -u en tant qu'utilisateur root :

$ crontab -r -u username

Supprimez le fichier crontab actuel avec une invite avant la suppression.

$ crontab -i

Variables Crontab

  •  PATH=/usr/bin :/bin est le chemin crontab par défaut. Cependant, vous pouvez définir un chemin vers la commande que vous exécutez ou modifier la variable cron $PATH.
  • bin/sh est le shell par défaut.
  • L'environnement MAILTO définit le propriétaire de la crontab pour envoyer les notifications par e-mail. Vous pouvez ajouter à la variable une liste de toutes les adresses e-mail séparées par des virgules pour recevoir des notifications par e-mail. Notez qu'aucun e-mail ne sera envoyé si la variable MAILTO est vide (c'est-à-dire MAILTO=" ").

Exemples de tâches Cron

La tâche cron suivante s'exécutera toutes les minutes :

* * * * * [cron job command]

La tâche cron suivante s'exécutera six fois par heure, c'est-à-dire toutes les 10 minutes :

*/10 * * * * [cron job command]

Exécutez un script toutes les demi-heures et redirigez la sortie vers "/home/tuts/Documents" :

[email protected]
*/30 * * * * /path/to/homescript.sh > /home/username/Documents

Utilisez l'opérateur &&pour exécuter deux commandes tous les vendredis à 8h :

0 8 * * Fri commandA && commandB

Exécutez une commande une fois par mois, le cinquième jour du mois à 2 h 00 :
(c'est-à-dire le 5 mars à 2 h 00, le 5 avril à 2 h 00, le 5 décembre à 2 h 00, etc.) :

0 2 5 * * [cron job command]

Exécutez un script à 10h30, les 3 et 23 de chaque mois :

30 10 3,23 * * /path/to/fosslinuxscript.sh

Utilisez la commande suivante pour définir les variables HOME, PATH, SHELL et MAILTO personnalisées 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 * * * * [cron job command]

Conseils de planification

La tâche de planification des tâches cron peut être difficile et intimidante à mesure que le nombre de tâches augmente. Les tâches cron exécutées en même temps, en particulier dans les environnements de production, peuvent créer de sérieux problèmes de performances. Par exemple, les sauvegardes système et les compilations qui s'exécutent simultanément utilisent de nombreuses ressources système et votre système peut manquer de RAM. Une façon de contourner un tel défi consiste à planifier des tâches gourmandes en ressources à différents moments de la journée, de la semaine ou du mois. Vous pouvez également ajouter plus de mémoire à votre système ou supprimer des tâches mal écrites qui utilisent une grande quantité de mémoire.

Un autre défi survient lorsque votre ordinateur est éteint pendant une période où une tâche cron est planifiée pour s'exécuter. Par conséquent, la tâche cron ne s'exécutera qu'à la prochaine exécution planifiée. Cela peut créer des problèmes, en particulier si la tâche cron est essentielle pour votre système. Heureusement, Linux fournit le programme anacron, qui donne aux utilisateurs la possibilité de planifier des tâches cron à intervalles réguliers. Pour en savoir plus, consultez les pages de manuel anacron.

Limiter l'accès cron

Cron fournit un moyen de contrôler quels utilisateurs système réguliers ont accès à la commande crontab. Il contribue à limiter les erreurs susceptibles de surcharger les ressources système telles que la mémoire. Pour éviter toute utilisation abusive, utilisez les fichiers /etc/cron.deny et /etc/cron.allow pour contrôler l'accès des utilisateurs. Vous pouvez ajouter un nom d'utilisateur à l'un ou l'autre des fichiers pour refuser ou autoriser l'accès.

Il est important de limiter l'accès aux tâches cron et à la commande crontab aux utilisateurs non root.

Conclusion

Cron est un outil principalement destiné aux administrateurs système, mais il est également pertinent pour de nombreuses tâches utilisateur. Par exemple, j'utilise cron pour planifier des tâches ennuyeuses comme des sauvegardes et dans des applications Web.

Je trouve les pages de manuel cron, crontab et anacron utiles et pleines de ressources avec des informations et des conseils.


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

  2. Conseils Linux pour utiliser cron pour planifier des tâches

  3. Surveillez votre système Linux dans votre terminal avec procps-ng

  4. Améliorez les performances du système Linux avec noatime

  5. Comprendre les appels système sous Linux avec strace

Qu'est-ce que Crontab et comment automatiser des tâches sous Linux avec Crontab

Trouver des informations sur le matériel du système Linux avec Hwinfo

Comment afficher les statistiques du système Linux avec Saidar

Comment automatiser des tâches avec des tâches cron sous Linux

Planification avec cron &At

Comprendre Crontab sous Linux avec des exemples