Comment utiliser Cron et Crontab pour planifier des tâches sous Linux
sais-tu coureur de lame En 2019 ? C’est trois ans plus tard !sans parler de retour vers le futur 2, ils remontent à 2015. Cependant, nous n’avons pas de voitures volantes, ni de réplicants (pour autant que je sache).
Lorsque nous comparons la technologie actuelle aux représentations fictives du futur, il est facile d’en être déçu. Pourtant, de nos jours, nos téléphones, nos ordinateurs et même nos maisons peuvent faire des choses incroyables. La capacité à automatiser les tâches en fait partie.
Chaque utilisateur Linux peut bénéficier de tâches de planification, qu’elles soient liées au système (comme le nettoyage des anciens journaux et la mise à jour des packages) ou au service des utilisateurs (vérification des e-mails, téléchargement de podcasts…). Les utilisateurs de Windows disposent du planificateur de tâches depuis Windows 95. Un utilitaire qui fait le même travail sous Linux s’appelle cron, et nous expliquons ici comment l’utiliser.
Qu’est-ce que Cron ?
Cron est un service système exécuté en arrière-plan qui vérifie les tâches planifiées et les exécute si elles sont trouvées. Ces tâches – également appelées « tâches cron » – sont définies dans des fichiers de configuration spéciaux (crontabs) que cron analyse toutes les minutes. Plusieurs versions de cron peuvent être trouvées sur différentes distributions Linux. Par exemple, un fork du cron de Fedora s’appelle cronie, et il y a aussi fcron, bcron et dcron. Certains ont des fonctionnalités supplémentaires, tandis que d’autres sont plus axés sur la sécurité, mais ils sont tous basés sur la même idée.
Faire une vidéo du jour
Ce guide est écrit pour vixie-cron, la version la plus utilisée de cron, et celle que vous trouverez sur Ubuntu et ses dérivés. Bien que la plupart des instructions s’appliquent également à d’autres implémentations cron, il peut y avoir des différences mineures, donc si vous décidez de changer, consultez leurs manuels.
Qu’est-ce que le Crontab ?
Si vous êtes sérieux au sujet de la gestion du temps, vous avez probablement une sorte de calendrier – une application ou au moins un morceau de papier. Crontab ressemble beaucoup au calendrier de votre ordinateur. Il contient des informations sur les tâches planifiées, indiquant à cron quelles commandes exécuter à quelle heure.
En fait, vous avez plusieurs crontabs sur votre système. Chaque utilisateur a sa propre crontab, y compris root (admin).La crontab utilisateur est stockée dans
/var/spool/cron/crontabs/
. cette
crontab -l
La commande listera le fichier crontab de l’utilisateur actuel. Vous pouvez vérifier le crontab racine
sudo crontab-l
.
De plus, il y a le fichier système crontab
/etc/crontab
Pour les tâches à l’échelle du système.Généralement, ils prennent la forme de scripts exécutables appartenant à root placés dans
/etc/cron.hourly/
,
/etc/cron.daily/
,
/etc/cron.weekly/
et
/etc/cron.monthly/
dossier, dans certaines distributions,
/etc/cron.d/
Il en va de même pour les dossiers. En général, vous n’avez pas à vous occuper de ces tâches car la plupart d’entre elles sont créées automatiquement par les applications installées.
Comment utiliser Cron pour planifier des tâches
Cela semble simple : pour planifier des tâches, ajoutez-les simplement à votre crontab. Étant donné que crontab est un fichier de configuration spécial, l’édition manuelle n’est pas recommandée.Utilisez plutôt
crontab -e
Commande. Pour modifier la crontab de root ou d’un autre utilisateur, exécutez la commande avec les privilèges administratifs et ajoutez leur nom d’utilisateur après l’option -u :
sudo crontab -u racine -e
sudo crontab -u nom d’utilisateur -e
Le fichier crontab comporte deux sections. Le premier contient des variables d’environnement définies automatiquement. Vous pouvez modifier en toute sécurité les variables PATH, HOME et SHELL et modifier la variable MAIL.
La deuxième partie du fichier est la « chronologie » réelle de vos tâches planifiées. Chaque tâche occupe une ligne (ligne) dans le tableau, et les colonnes représentent les valeurs suivantes :
Pour planifier des tâches avec succès, vous devez en savoir un peu plus sur la syntaxe crontab :
- Les nombres doivent être des nombres entiers (nombres entiers), des astérisques peuvent être utilisés
- Sous forme de caractère générique dans n’importe quelle colonne, signifiant « chaque minute/jour/mois… ».
- Dans la colonne « Mois », veillez à ne pas définir un jour pour un mois qui n’est pas spécifié dans la colonne « Mois » (par exemple, le 30 février).
- Les colonnes « Mois » et « Jour de la semaine » acceptent les noms courts pour le mois et le jour, respectivement, et ne sont pas sensibles à la casse.
- Dans la colonne Jour de la semaine, 0 et 7 représentent le dimanche. La colonne « Heure » nécessite le format « Heure militaire » (horloge de 24 heures), mais vous ne pouvez pas utiliser le nombre 24 – à la place, 0 représente 12 AM C’est parce que les valeurs des minutes, des heures et du jour du la semaine commence à 0 au lieu de 1.
Les secondes ne sont pas prises en charge, vous ne pouvez donc pas planifier des tâches pour des secondes spécifiques.
Ce que vous pouvez faire est de programmer une plage horaire inclusive à l’aide de tirets (14-22 sous « heures » exécutera la tâche en continu de 14h à 22h), ou en définissant une liste séparée par des virgules (1, sous « jour de la semaine » 3, 5 exécutera la tâche les lundi, mercredi et vendredi).
Pendant ce temps, la valeur de pas, indiquée par une barre oblique (/), indique le nombre de sauts dans une plage ; par exemple, 3-20/3 sous « heures » s’exécutera toutes les trois heures de 3h00 à 20h00 Une tâche Ceci est utile lorsque vous souhaitez que la tâche se répète toutes les X heures, car vous pouvez combiner des astérisques et des étapes (*/X). Tant que vous travaillez avec des nombres, vous pouvez combiner des plages avec des listes et des étapes avec des plages. En d’autres termes, les combinaisons telles que « jan-mar » ou « mar, ven-dim » ne sont pas autorisées.
Vous pouvez également écrire @weekly, @yearly, @monthly, @daily ou @hourly au début d’une ligne au lieu de définir une valeur pour chaque colonne suivie d’une commande. Une tâche planifiée comme celle-ci s’exécutera dans la première instance possible, donc @weekly s’exécutera à minuit le premier jour de la semaine. Si vous souhaitez exécuter la tâche dès que le système (re)démarre, utilisez la commande @reboot.
Dans cet exemple, nous planifions des sauvegardes à 08h20 et 20h20 tous les jours. Le fond d’écran change automatiquement tous les trois jours à 19h00 et le script recherchera de nouveaux podcasts tous les lundis à 10h20 et 20h20. Le rappel d’anniversaire est défini sur le 25 mars et s’exécute toutes les 30 minutes pendant la période spécifiée. Enfin, de 8h00 à 20h00, le script vérifie les e-mails toutes les 15 minutes, mais uniquement en semaine. Vous êtes libre d’organiser votre crontab avec des espaces et des tabulations entre les colonnes, mais pas entre les colonnes (ne mettez pas d’espaces entre les virgules, les tirets et les barres obliques).
Si tout cela vous semble trop compliqué, ne vous inquiétez pas, vous pouvez toujours compter sur Internet. Des outils comme Crontab Generator, Crontab.guru et Corntab vous aident à créer des tâches cron sans connaître la syntaxe crontab. Ils vous indiquent quand exécuter le travail ensuite et fournissent des modèles pour les expressions courantes. Crontab.guru est le meilleur du groupe car il vous permet de tester la syntaxe crontab en temps réel, afin que vous puissiez voir instantanément comment vos modifications affecteront votre plan.
Comment vérifier si une tâche cron a été exécutée
Cron est censé fonctionner silencieusement en arrière-plan, vous permettant de travailler sans interruption tout en travaillant sur vos tâches. Mais comment être sûr que cela fonctionne réellement ?
Cron a des notifications par e-mail intégrées, mais cela nécessite au moins une configuration simple du serveur de messagerie local. Peu d’utilisateurs à domicile sont disposés à le configurer, et peu de distributions l’offrent par défaut (Ubuntu, par exemple, ne le fait pas). Le moyen le plus rapide de vérifier cron est d’analyser le journal système avec :
chat /var/log/syslog | grep -i cron
L’option -i rend notre requête insensible à la casse. cron peut avoir son propre fichier journal quelque part
/var/log/
donc si cette commande ne produit pas de résultats utiles, regardez là-bas.
Si vous devez enregistrer la sortie d’une tâche cron spécifique, vous pouvez la rediriger vers un fichier. Après la commande que vous souhaitez exécuter, indiquez le chemin et le nom du fichier dans la dernière colonne de crontab :
30 * * * * /usr/bin/votrecommande > /home/nomutilisateur/fichierjournal.txt
L’utilisation d’un seul symbole > écrasera le fichier à chaque exécution de la commande. Pour éviter cela, utilisez plutôt >> – il ajoute la sortie à un fichier existant.
Et si Cron ne fonctionne pas ?
Vous pouvez ajouter des tâches, vérifier les journaux système et constater qu’elles ne font pas ce qu’elles devraient. Voici quelques éléments à prendre en compte – et à prendre en compte – lorsque vous essayez de résoudre le problème.
Le service cron est-il en cours d’exécution ?
Comme vous le savez, le démon cron doit s’exécuter en arrière-plan. Assurez-vous que c’est le cas. Le service s’appelle crond ou simplement cron.
Pour les distributions utilisant systemd :
cron d’état systemctl
Pour les distributions utilisant Upstart :
état du service cron
Si votre distribution utilise l' »ancienne » méthode d’initialisation System V, répertoriez tous les services :
liste d’initialisation
et voyez si cron est répertorié.
Êtes-vous même autorisé à avoir un fichier crontab?
vérifier votre
/ETC
dossier de nom de fichier
cron.autoriser
et
cron.deny
Sur Ubuntu, aucun des deux ne devrait exister, ce qui signifie que tous les utilisateurs peuvent gérer les tâches cron.Cependant, s’il existe un
cron.autoriser
fichier, il doit contenir votre nom d’utilisateur.A l’inverse, si
cron.deny
Le fichier existe, votre nom d’utilisateur ne doit pas s’y trouver.laisser
cron.deny
Un fichier vide signifie uniquement les utilisateurs root et répertoriés
cron.autoriser
Il peut y avoir des fichiers crontab.
Vos variables sont-elles correctement définies ?
Crontab définit automatiquement votre variable SHELL sur
/bin/ch
Cependant, si votre coquille de choix est fish ou bash, vous devez changer la variable SHELL
Encore une fois, la variable PATH ne contient que quelques répertoires par défaut. C’est là que crontab recherche les commandes Linux. Si votre tâche cron ne s’exécute pas, c’est peut-être parce que crontab ne « voit » pas la commande que vous utilisez. Pour éviter cela, ajoutez les répertoires contenant les commandes à la variable PATH, séparés par des deux-points :
CHEMIN=/opt/monapp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Si vous ne souhaitez pas le modifier dans crontab, vous pouvez définir ces variables dans un script à exécuter en tant que tâche cron.
Votre crontab est-il correctement formaté ?
- La syntaxe crontab n’est pas toujours fluide. Même si vous utilisez les outils en ligne susmentionnés pour vérifier, une petite erreur peut toujours empêcher cron d’exécuter votre travail. mise en garde:
- Ajouter une ligne vide à la fin du fichier crontab
- Si votre commande contient un signe %, échappez-le avec une barre oblique inverse
Écrivez les commentaires sur des lignes séparées commençant par #. N’écrivez pas de commentaires à côté des mêmes lignes que les variables d’environnement ou les commandes de tâche cron.
Faut-il vraiment utiliser le terminal ? Absolument pas. Les utilisateurs de KDE peuvent utiliser KCron pour planifier des tâches cron à partir de Paramètres système > Planificateur de tâches
module. KCron a une interface simple qui vous permet de tout sélectionner et de tout régler en quelques clics de souris, ce qui en fait un plaisir à utiliser.
Si vous préférez GNOME, alors GNOME Schedule est fait pour vous. L’approche est similaire, même si l’interface devrait être légèrement différente. Il offre un mode avancé pour une modification fine, avec une applet de panneau à partir de laquelle vous pouvez gérer les tâches directement.
Vous devez connaître d’autres solutions telles que Crontab-UI et Minicron. Ils conviennent mieux aux utilisateurs qui gèrent plusieurs machines et tâches cron, et l’une de leurs fonctionnalités les plus intéressantes est leur interface Web.
…