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

La possibilité d'automatiser les tâches est l'une de ces technologies futuristes déjà présentes. Chaque utilisateur de Linux peut bénéficier de la planification du système et des tâches de l'utilisateur, grâce à cron, un service d'arrière-plan facile à utiliser.

La possibilité d'automatiser les tâches est l'une de ces technologies futuristes déjà présentes.  Chaque utilisateur de Linux peut bénéficier de la planification du système et des tâches de l'utilisateur, grâce à cron, un service d'arrière-plan facile à utiliser.
Publicité

Saviez-vous que Blade Runner se déroule en 2019? C'est trois ans à partir de maintenant! Sans parler de Retour vers le Futur 2, où ils voyagent dans le temps 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).

linux-cron-jobs-citation

Il est facile de se sentir déçu de la technologie actuelle lorsqu'on la compare à des représentations fictives du futur. Encore, ces jours-ci, nos téléphones, ordinateurs et même maisons peuvent faire des choses étonnantes 5 Projets DIY Home Automation pour commencer votre maison intelligente 5 projets DIY Home Automation pour commencer votre maison intelligente Quand il s'agit de créer des maisons intelligentes, la plupart des gens Je ne sais pas par où commencer. Voici cinq projets de maison intelligente débutants de base que vous pouvez construire dès maintenant. Lire la suite . La capacité d'automatiser les tâches est l'une d'entre elles.

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 paquets). Comment mettre à jour une ou toutes les applications sur Linux en quelques secondes simplifie la mise à jour d'une seule application sur votre ordinateur, ou applique toutes les mises à jour disponibles en une seule fois: voici comment.) ou au service de l'utilisateur (vérification des courriels, téléchargement de podcasts ...). Tâches d'automatisation avec le planificateur de tâches de Windows Tâches que vous pouvez automatiser avec le planificateur de tâches de Windows Votre temps est trop précieux pour être gaspillé avec des tâches répétitives. Laissez-nous vous montrer comment automatiser et planifier des tâches. Nous avons aussi quelques bons exemples. Lire la suite depuis Windows 95. L'utilitaire qui fait le même travail sous Linux s'appelle cron, et nous allons vous expliquer comment l'utiliser.

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 «jobs cron» 5 Idées de configuration Linux débutant pour les scripts cron et les scripts shell Avec le script bash, vous pouvez effectuer une série complexe de tâches en une seule fois. besoins élaborés et répétitifs. C'est aussi un excellent moyen de connaître le terminal. Lire la suite "- sont définis dans des fichiers de configuration spéciaux (crontabs), qui cron scanne chaque minute. Plusieurs versions de cron peuvent être trouvées sur différentes distributions Linux. Par exemple, la fourchette de 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.

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 cron, il peut y avoir des différences mineures, alors vérifiez 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 un calendrier quelconque. Organiser votre temps avec ces 4 applications de calendrier Linux Organiser votre temps avec ces 4 applications de calendrier Linux Est-il logique d'utiliser une application de calendrier de bureau? Nous le pensons, en particulier pour permettre l'accès aux événements sur n'importe quel appareil synchronisé. Ces applications de calendrier Linux sont particulièrement utiles. Lire la suite - 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 doivent être exécutées à quelle heure.

En fait, plusieurs crontabs sont sur votre système. Chaque utilisateur a son propre crontab, y compris root (l'administrateur). Les crontabs utilisateur sont stockés dans /var/spool/cron/crontabs/ . La commande crontab -l listera le fichier crontab de 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. Généralement, ils prennent la forme de scripts exécutables appartenant à la racine placés dans les /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/ et /etc/cron.monthly/, et sur certaines distributions, le dossier /etc/cron.d/ aussi. En règle générale, vous ne devriez pas avoir à faire face à 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, il suffit de les ajouter à votre crontab. Comme crontab est un fichier de configuration spécial, il n'est pas recommandé de le modifier manuellement. Au lieu de cela, utilisez la commande crontab -e . Pour modifier la racine ou les crontabs d'autres utilisateurs, exécutez la commande avec les privilèges d'administration et ajoutez leur nom d'utilisateur après l'option -u:

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

linux-cron-jobs-crontab-éditeur

Le fichier crontab a deux sections. Le premier contient des variables d'environnement qui sont configurées automatiquement. Vous pouvez modifier les variables PATH, HOME et SHELL en toute sécurité 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 la table, avec des colonnes représentant les valeurs suivantes:

linux-cron-emplois-crontab

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

  • Les nombres doivent être des 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 se produit 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 abrégés des mois et des jours, respectivement, et ne tiennent pas compte de la casse.
  • Dans la colonne "Jour de la semaine", 0 et 7 correspondent à dimanche. La colonne "Heure" requiert le format "heure militaire" (24 heures), mais vous ne pouvez pas utiliser le chiffre 24 - au lieu de cela, 0 signifie 12 heures. Les valeurs de minute, heure et jour de la semaine commencent à 0 au lieu de 1.
  • Les secondes ne sont pas supportées, donc vous ne pouvez pas planifier une tâche à une seconde particulière.

Ce que vous pouvez faire est de programmer des intervalles de temps inclus en utilisant un tiret (14-22 sous "Heures" exécutera la tâche en continu de 14h00 à 22h00), 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 d'étape, sont représentées par une barre oblique (/), et ceux-ci 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 heures du matin à 20 heures. Ceci est utile lorsque vous voulez répéter des tâches toutes les X heures, car vous pouvez combiner un astérisque et un pas (* / X). Vous pouvez combiner des plages avec des listes et des étapes avec des plages aussi longtemps que vous utilisez des nombres. En d'autres termes, les combinaisons telles que "jan-mar" ou "mar, ven-dim" ne sont pas autorisées.

Sinon, 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. Prévu comme ceci, les tâches seront exécutées à la première instance possible, et donc @weekly fonctionnera à minuit le premier jour de la semaine. Si vous voulez exécuter une tâche immédiatement lorsque le système (re) démarre, utilisez la commande @reboot.

linux-cron-jobs-crontab-exemple

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érifie la présence de nouveaux podcasts. Les 10 meilleures applications pour gérer les podcasts sous Linux Les 10 meilleures applications pour gérer les podcasts sous Linux Linux n'a pas un grand choix de clients podcast, mais ne vous inquiétez pas - presque tous les lecteurs de musique modernes pour Linux peuvent servir de podcatcher. Jetons un coup d'oeil aux options. Lire la suite tous les lundis à 10:20 et 20:20. Un rappel d'anniversaire est défini pour le 25 mars et il est exécuté toutes les 30 minutes dans le délai spécifié. Enfin, un script vérifie l'email toutes les 15 minutes de 8 à 20, mais seulement les jours ouvrables. Vous êtes libre d'organiser votre crontab avec des espaces et des tabulations entre les colonnes, mais pas en leur sein (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 tels que Crontab Generator, Crontab.guru et Corntab vous aident à créer des tâches cron sans connaître de syntaxe crontab. Ils vous indiquent quand le travail sera exécuté ensuite et fournissent des modèles pour les expressions couramment utilisées. Crontab.guru est le meilleur de la grappe car il vous permet de tester la syntaxe de crontab en direct, de sorte que vous pouvez immédiatement voir comment vos changements affecteront le calendrier.

linux-cron-emplois-crontab-guru

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

Cron est censé fonctionner silencieusement en arrière-plan et vous laisser 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 possède une fonction de notification par courrier électronique intégrée, mais cela nécessite la configuration d'au moins un simple serveur de messagerie local. Comment fonctionne un serveur de messagerie? [Technologie expliquée] Comment fonctionne un serveur de messagerie? [Technologie expliquée] Derrière chaque email se trouve un puissant moteur appelé le serveur d'email qui pousse les emails à travers Internet. Lire la suite . Pas beaucoup d'utilisateurs à domicile sont prêts à configurer cela, et pas beaucoup de distributions le fournissent par défaut (par exemple, Ubuntu ne le fait pas). Le moyen le plus rapide de vérifier sur cron est de scanner le journal système avec cette commande:

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

linux-cron-jobs-log

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 là si cette commande échoue à produire des résultats utiles.

Si vous devez enregistrer la sortie d'un travail cron particulier, vous pouvez le 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 symbole unique écrase le fichier chaque fois que la commande est exécutée. Pour éviter cela, utilisez >> à la place - il ajoute la sortie au fichier existant.

Que faire si Cron ne fonctionne pas?

Il peut arriver que vous ayez ajouté des tâches, vérifié les journaux du système et constaté qu'ils ne s'exécutent pas comme ils le devraient. Voici certaines choses que vous devriez considérer - et faites attention à - en essayant de résoudre le problème.

Le service cron est-il en cours d'exécution?

Comme vous le savez, le démon cron devrait fonctionner en arrière-plan. Assurez-vous que c'est vraiment le cas. Le service est soit appelé crond ou juste cron.

Pour les distributions utilisant systemd:

systemctl status cron

Pour les distributions utilisant Upstart:

service cron status

linux-cron-jobs-service-statut

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

initctl list

et voir si cron est listé.

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

Vérifiez votre dossier /etc pour les fichiers nommés cron.allow et cron.deny . Sur Ubuntu, aucun ne devrait exister, ce qui signifie que tous les utilisateurs sont autorisés à gérer des tâches cron. Cependant, s'il existe un fichier cron.allow, il doit contenir votre nom d'utilisateur. Inversement, si le fichier cron.deny existe, votre nom d'utilisateur ne doit pas s'y trouver. Laisser le fichier cron.deny vide signifie que seuls les utilisateurs root et les utilisateurs listés dans cron.allow peuvent avoir des fichiers crontab.

Vos variables sont-elles correctement définies?

Crontab définit automatiquement votre variable SHELL sur /bin/sh . Cependant, si votre coquille de choix est le poisson 7 raisons pour lesquelles vous devriez installer le shell de poisson 7 raisons pour lesquelles vous devriez installer le shell de poisson N'aimez pas comment fonctionne votre terminal Linux? Pourquoi ne pas installer un nouveau shell? L'un de ces coquillages est le poisson, qui présente des caractéristiques qui auraient dû devenir courantes, mais qui ne l'ont pas été. Nous allons jeter un coup d'oeil. Lire la suite ou bash, vous devriez changer la variable SHELL . De même, la variable PATH ne contient que quelques répertoires par défaut. C'est là que crontab cherche les commandes Linux. Si votre tâche cron échoue, c'est peut-être parce que crontab ne "voit" pas la commande que vous avez utilisée. Pour éviter cela, ajoutez les répertoires contenant les commandes à la variable PATH, séparés par des deux-points:

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

Si vous ne voulez pas modifier ceci dans votre crontab, vous pouvez définir ces variables dans le script que vous voulez exécuter en tant que travail cron.

Est-ce que votre formatage crontab est sur le point?

La syntaxe de Crontab n'est pas vraiment lisse. 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 travaux. Faites attention à:

  • ajouter une ligne vide à la fin du fichier crontab
  • échapper le signe% avec un backslash si votre commande l'inclut
  • écrire des commentaires sous forme de 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 travail cron.

Avez-vous vraiment besoin d'utiliser le terminal?

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

linux-cron-jobs-kcron

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

linux-cron-jobs-gnome-horaire

Vous devriez être au courant des autres solutions, comme Crontab-UI et Minicron. Ils sont plus adaptés 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.

linux-cron-emplois-crontabui

Y a-t-il des alternatives Cron?

Alors que cron est à peu près le planificateur de tâches standard pour Linux Planifier et automatiser des tâches sous Linux avec Gnome Schedule Schedule & Automatiser des tâches dans Linux Avec Gnome Schedule Lire la suite, ce n'est certainement pas le seul. La commande at est parfaite 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 travail ou faire dépendre une tâche planifiée d'une tâche précédente. Quelque chose de similaire peut être réalisé avec les minuteries systemd. Bien que moins pratique à configurer que cron, les temporisateurs systemd peuvent se rappeler si une tâche a manqué son emploi du temps alors que l'ordinateur était éteint, et l'exécuter la prochaine fois qu'elle est activée.

C'est quelque chose que cron ne peut pas faire seul. En tant que tel, il convient aux serveurs et aux ordinateurs qui sont constamment en cours d'exécution, mais n'exécuteront pas un travail qui a été planifié alors que l'ordinateur était éteint. C'est là que l'anacron entre en jeu. Techniquement, ce n'est pas une "alternative" ou un remplacement pour cron. Au lieu de cela, anacron complète cron et devrait être utilisé à côté de lui, ce qui est le cas sur de nombreuses distributions Linux, y compris les produits basés sur Ubuntu et Ubuntu. Anacron se connecte lors de la dernière exécution d'une tâche et vérifie s'il y a eu des cas manqués lors de la mise hors tension du système. Il les exécutera lorsque vous rallumerez l'ordinateur, mais chaque tâche peut être exécutée une seule fois par jour.

Certaines versions de cron, comme fcron, offrent par défaut les fonctionnalités d'anacron. Les utilisateurs expérimentés peuvent vouloir regarder Hcron ou SuperCron, qui apportent de nombreuses améliorations aux fonctions cron de base, mais qui sont aussi un peu difficiles à gérer.

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

Crédit d'image: tableau de bord par Gonzalo Aragon via Shutterstock

In this article