Comment planifier des tâches sous Linux avec Cron et Crontab

Comment planifier des tâches sous Linux avec Cron et Crontab

Saviez-vous que Coureur de lame est fixé en 2019 ? C'est dans trois ans ! Sans parler de Retour vers le futur 2 , où ils voyagent dans le temps jusqu'en 2015. Pourtant, nous n'avons pas de voitures volantes et il n'y a pas de réplicants parmi nous (pour autant que je sache).





Il est facile de se sentir déçu par la technologie actuelle lorsque nous la comparons aux représentations fictives du futur. Pourtant, de nos jours, nos téléphones, nos ordinateurs et même nos maisons peuvent faire des choses incroyables. La possibilité d'automatiser les tâches en fait partie.





Chaque utilisateur Linux peut bénéficier de la planification des tâches, qu'elles soient liées au système (comme le nettoyage des anciens journaux et mise à jour des packages ) ou au service de l'utilisateur (consultation de ses e-mails, téléchargement de podcasts...). Les utilisateurs de Windows disposent du Planificateur de tâches depuis Windows 95. L'utilitaire qui fait le même travail sous Linux s'appelle cron, et nous expliquerons ici comment l'utiliser.





comment bloquer une application sur iphone

Qu'est-ce que Cron ?

Cron est un service système qui s'exécute en arrière-plan, vérifie les tâches planifiées et les exécute s'il en trouve. Les 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, le fork de cron de Fedora s'appelle copain , 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.

Ce guide est écrit pour vixie-cron, qui est la version la plus répandue 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 de cron, il peut y avoir des différences mineures, alors consultez leurs manuels si vous décidez de changer.



Qu'est-ce qu'un Crontab ?

Si vous êtes sérieux au sujet de la gestion de votre 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 les informations sur les tâches planifiées, indiquant à cron quelles commandes exécuter à quel moment.

En fait, plusieurs crontabs sont sur votre système. Chaque utilisateur a sa propre crontab, y compris root (l'administrateur). Les crontabs des utilisateurs sont stockées dans





/var/spool/cron/crontabs/

. Les

crontab -l

La commande listera le fichier crontab pour l'utilisateur actuel. Vous pouvez vérifier la crontab racine avec





sudo crontab -l

.

De plus, il y a le fichier système crontab

/etc/crontab

qui est utilisé pour les tâches à l'échelle du système. Habituellement, ils prennent la forme de scripts exécutables appartenant à la racine placés dans

/etc/cron.hourly/

,

/etc/cron.daily/

,

/etc/cron.weekly/

, et

/etc/cron.monthly/

et sur certaines distributions, le

/etc/cron.d/

dossier aussi. De manière générale, vous ne devriez pas avoir à gérer ces tâches, car la plupart d'entre elles sont créées automatiquement par les applications installées.

Comment planifier des tâches avec Cron

Cela semble simple : pour planifier des tâches, ajoutez-les simplement à votre crontab. Étant donné que crontab est un fichier de configuration spécial, il n'est pas recommandé de le modifier manuellement. Utilisez plutôt le

crontab -e

commander. Pour modifier les crontabs root ou d'autres utilisateurs, exécutez la commande avec des privilèges administratifs et ajoutez leur nom d'utilisateur après l'option -u :

sudo crontab -u root -e
sudo crontab -u username -e

Le fichier crontab comporte deux sections. Le premier contient des variables d'environnement qui sont configurées 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 le « calendrier » réel avec vos tâches planifiées. Chaque tâche occupe une ligne (ligne) dans le tableau, avec des colonnes représentant les valeurs suivantes :

Pour planifier avec succès des tâches, vous devez en savoir un peu plus sur la syntaxe crontab :

  • Les nombres doivent être des nombres entiers (nombres entiers), et vous pouvez utiliser l'astérisque (*) dans n'importe quelle colonne comme caractère générique, ce qui signifie « chaque minute/jour/mois... ».
  • Dans la colonne 'Jour du mois', veillez à ne pas définir une date qui ne tombe pas dans le mois 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 les mois et les jours, respectivement, et elles sont insensibles à la casse.
  • Dans la colonne 'Jour de la semaine', 0 et 7 correspondent à dimanche. La colonne « Heure » ​​nécessite le format « heure militaire » (24 heures), mais vous ne pouvez pas utiliser le nombre 24 - à la place, 0 signifie 12 h 00. C'est parce que les valeurs des minutes, des heures et des jours de la semaine commencent à 0 au lieu de 1.
  • Les secondes ne sont pas prises en charge, vous ne pouvez donc pas planifier une tâche à une seconde particulière.

Ce que vous pouvez faire, c'est planifier des plages de temps inclusives à l'aide d'un tiret (14-22 sous « Heures » exécutera la tâche en continu de 14 h 00 à 22 h 00), ou exécuter une seule tâche plusieurs fois en définissant une liste séparée par des virgules (1, 3,5 sous « Jour de la semaine » exécutera la tâche les lundi, mercredi et vendredi).

Pendant ce temps, les valeurs de pas sont représentées par une barre oblique (/), et elles indiquent le nombre de sauts dans une plage ; par exemple, 3-20/3 sous « Heures » exécutera la tâche toutes les trois heures de 3 h 00 à 20 h 00. Ceci est utile lorsque vous souhaitez répéter des tâches toutes les X heures, car vous pouvez combiner un astérisque et une étape (*/X). Vous pouvez combiner des plages avec des listes et des étapes avec des plages tant que vous utilisez des nombres. En d'autres termes, les combinaisons telles que 'jan-mar' ou 'mar, ven-dim' ne sont pas autorisées.

Alternativement, au lieu de définir une valeur pour chaque colonne, vous pouvez simplement écrire @weekly, @yearly, @monthly, @daily ou @hourly au début d'une ligne, suivi d'une commande. Planifiées ainsi, les tâches s'exécuteront à la première instance possible, donc @weekly s'exécutera à minuit le premier jour de la semaine. Si vous souhaitez exécuter une tâche immédiatement au (re)démarrage du système, utilisez la commande @reboot.

Dans cet exemple, nous avons programmé une sauvegarde tous les jours à 08h20 et 20h20. Le fond d'écran change automatiquement tous les trois jours à 19h00, et un script vérifiera les nouveaux podcasts tous les lundis à 10h20 et 20h20. Un rappel d'anniversaire est défini pour le 25 mars et il s'exécute toutes les 30 minutes dans le délai spécifié. Enfin, un script vérifie les e-mails toutes les 15 minutes de 8 à 20, mais uniquement les jours ouvrables. Vous êtes libre d'organiser votre crontab avec des espaces et des tabulations entre les colonnes, mais pas à l'intérieur (ne mettez pas d'espaces entre les virgules, les traits d'union 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 Générateur de crontab , Crontab.guru , et Corntab vous aident à créer des tâches cron sans connaître la syntaxe crontab. Ils vous indiquent la prochaine exécution du travail et fournissent des modèles pour les expressions couramment utilisées. Crontab.guru est le meilleur du lot car il vous permet de tester en direct la syntaxe de crontab, afin que vous puissiez voir immédiatement comment vos modifications affecteront le calendrier.

Comment vérifier si les tâches Cron sont exécutées

Cron est censé s'exécuter silencieusement en arrière-plan et vous permettre de travailler sans être dérangé pendant qu'il s'occupe de vos tâches. Mais comment pouvez-vous vous assurer que cela fonctionne réellement ?

Cron dispose d'une fonction de notification par e-mail intégrée, mais cela nécessite la configuration d'au moins un simple serveur de messagerie local . Peu d'utilisateurs à domicile sont prêts à le configurer, et peu de distributions le fournissent par défaut (par exemple, Ubuntu ne le fait pas). Le moyen le plus rapide de vérifier cron est d'analyser le journal système avec cette commande :

cat /var/log/syslog | grep -i cron

L'option -i rend notre requête insensible à la casse. Il est possible que cron ait son propre fichier journal quelque part dans

/var/log/

, alors regardez-y si cette commande ne produit pas de résultats utiles.

Si vous devez enregistrer la sortie d'une tâche cron particulière, vous pouvez la rediriger vers un fichier. Indiquez le chemin et le nom du fichier dans la dernière colonne de votre crontab, après la commande que vous souhaitez exécuter :

30 * * * * /usr/bin/yourcommand > /home/username/logfile.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 au fichier existant.

Et si Cron ne fonctionne pas ?

Il peut arriver que vous ayez ajouté des tâches, vérifié les journaux système et constaté qu'elles ne s'exécutent pas comme elles le devraient. Voici quelques éléments que vous devez prendre en compte - et faire attention - lorsque vous essayez de résoudre le problème.

Le service cron fonctionne-t-il ?

Comme vous le savez, le démon cron devrait s'exécuter en arrière-plan. Assurez-vous que c'est vraiment le cas. Le service s'appelle soit crond, soit simplement cron.

Pour les distributions utilisant systemd :

systemctl status cron

Pour les distributions utilisant Upstart :

service cron status

Si votre distribution utilise l''ancienne' approche d'initialisation System V, répertoriez tous les services avec :

que signifie netflix série limitée
initctl list

et voyez si cron est répertorié.

Êtes-vous même autorisé à avoir un fichier crontab?

Vérifier votre

/etc

dossier pour les fichiers nommés

cron.allow

et

cron.deny

. Sur Ubuntu, aucun des deux ne devrait exister, ce qui signifie que tous les utilisateurs sont autorisés à gérer les tâches cron. Cependant, s'il y a un

meilleure visionneuse d'images pour windows 10
cron.allow

fichier, il doit contenir votre nom d'utilisateur. A l'inverse, si le

cron.deny

existe, votre nom d'utilisateur ne doit pas s'y trouver. Quittant le

cron.deny

fichier vide signifie que seuls root et les utilisateurs répertoriés dans

cron.allow

peut avoir des fichiers crontab.

Vos variables sont-elles correctement définies ?

Crontab définit automatiquement votre variable SHELL sur

/bin/sh

. Toutefois, si votre coquille de choix est le poisson ou bash, vous devez modifier la variable SHELL

. De même, 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 avez utilisée. Pour éviter cela, ajoutez des répertoires contenant les commandes à la variable PATH, séparés par des deux-points :

CHEMIN=/opt/myapp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Si vous ne souhaitez pas modifier cela dans votre crontab, vous pouvez définir ces variables dans le script que vous souhaitez exécuter en tant que tâche cron.

Le formatage de votre crontab est-il pertinent ?

La syntaxe de Crontab n'est pas vraiment fluide. Même si vous le vérifiez avec les outils en ligne mentionnés précédemment, une erreur mineure pourrait toujours empêcher cron d'exécuter vos tâches. Attention à :

  • ajouter une ligne vide à la fin du fichier crontab
  • échapper au signe % avec une barre oblique inverse si votre commande l'inclut
  • écrivez les commentaires sur des lignes séparées commençant par #. N'écrivez pas de commentaires sur la même ligne que les variables d'environnement ou à côté des commandes de tâche cron.

Faut-il vraiment utiliser le terminal ?

Absolument pas. Les utilisateurs de KDE peuvent planifier des tâches cron avec KCron, accessible depuis le Paramètres système > Planificateur de tâches module. Avec une interface simple qui vous permet de tout choisir et de tout modifier en quelques clics de souris, KCron est un plaisir à utiliser.

Si vous préférez GNOME, alors Horaire GNOME est pour toi. L'approche est similaire, bien que l'interface soit, vraisemblablement, légèrement différente. Il offre un mode avancé pour des modifications fines et est livré avec une applet de panneau à partir de laquelle vous pouvez gérer directement les tâches.

Vous devez connaître d'autres solutions, comme 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 l'interface Web.

Existe-t-il des alternatives à Cron ?

Alors que cron est à peu près le planificateur de tâches standard pour Linux, ce n'est certainement pas le seul. Les au commandement est parfait pour les travaux rapides et ponctuels qui peuvent être planifiés directement à partir de la ligne de commande, sans fichiers de configuration spéciaux. Si vous avez besoin de plus, il y a GNUbatch , qui introduit la notion de dépendance. Avec GNUbatch, vous pouvez définir des conditions spécifiques pour chaque tâche, ou faire dépendre une tâche planifiée d'une précédente. Quelque chose de similaire peut être réalisé avec minuteries système . Bien que moins pratiques à configurer que cron, les minuteurs systemd peuvent se souvenir si une tâche a manqué son calendrier alors que l'ordinateur était éteint, et l'exécuter la prochaine fois qu'il est allumé.

C'est quelque chose que cron ne peut pas faire seul. En tant que tel, il convient aux serveurs et aux ordinateurs qui fonctionnent en permanence, mais il n'exécutera pas une tâche qui a été planifiée pendant que l'ordinateur était éteint. C'est ici que anacron entre en jeu. Ce n'est techniquement pas une 'alternative' ou un remplacement pour cron. Au lieu de cela, anacron complète cron et doit être utilisé en parallèle, ce qui est le cas sur de nombreuses distributions Linux, y compris Ubuntu et les produits basés sur Ubuntu. Anacron enregistre la dernière exécution d'une tâche et vérifie s'il y a eu des instances manquées pendant la mise hors tension du système. Il les exécutera lorsque vous rallumerez l'ordinateur, mais chaque tâche ne peut être exécutée qu'une fois par jour.

Certaines versions de cron, comme fcron, offrent les fonctionnalités d'anacron par défaut. Les utilisateurs avancés voudront peut-être regarder Hcron ou SuperCron , qui apportent de nombreuses améliorations aux fonctions de base de cron, mais sont également quelque peu difficiles à gérer.

Et toi? Comment organisez-vous vos tâches numériques ? Quelles tâches planifiez-vous sous Linux ? Partagez vos histoires et astuces pour utiliser cron dans les commentaires.

Crédit d'image : tableau des horaires par Gonzalo Aragon via Shutterstock

Partager Partager Tweeter E-mail 12 sites vidéo qui sont meilleurs que YouTube

Voici quelques sites de vidéos alternatifs à YouTube. Ils occupent chacun un créneau différent, mais valent la peine d'être ajoutés à vos signets.

Lire la suite
Rubriques connexes
  • Linux
  • Linux
A propos de l'auteur Ivana Isadora Devcic(24 articles publiés)

Ivana Isadora est une rédactrice et traductrice indépendante, une amoureuse de Linux et une fangirl de KDE. Elle soutient et promeut les logiciels libres et open source, et elle est toujours à la recherche d'applications fraîches et innovantes. Découvrez comment entrer en contact ici .

Plus de Ivana Isadora Devcic

Abonnez-vous à notre newsletter

Rejoignez notre newsletter pour des conseils techniques, des critiques, des ebooks gratuits et des offres exclusives !

Cliquez ici pour vous abonner