Planifier des tâches avec at et cron sous Linux

CompTIABeginner
Pratiquer maintenant

Introduction

Dans cet atelier, vous allez découvrir les fondamentaux de la planification de tâches dans un environnement Linux. Vous explorerez deux utilitaires essentiels en ligne de commande : at pour programmer des tâches uniques devant s'exécuter à un moment précis dans le futur, et cron pour automatiser les tâches récurrentes qui doivent être exécutées selon un calendrier régulier (quotidien, hebdomadaire ou mensuel).

Vous commencerez par préparer votre environnement de travail en vous assurant que les services at et cron sont installés et actifs. Vous vous exercerez ensuite à créer une tâche ponctuelle avec la commande at et à gérer la file d'attente des travaux avec atq et atrm. Enfin, vous utiliserez la commande crontab pour créer, vérifier et supprimer une tâche cron récurrente, ce qui vous donnera une expérience concrète de l'automatisation des tâches d'administration système.

Préparer l'environnement de l'atelier

Dans cette étape, vous allez préparer l'environnement de l'atelier en installant les outils nécessaires à la planification des tâches sous Linux. Les deux outils principaux que nous utiliserons sont at pour les tâches ponctuelles et cron pour les tâches récurrentes. Bien que cron soit généralement pré-installé sur la plupart des systèmes Linux, l'utilitaire at peut nécessiter une installation manuelle.

Tout d'abord, mettons à jour la liste des paquets pour nous assurer de pouvoir récupérer la version la plus récente des logiciels.

sudo apt-get update

Vous verrez s'afficher la progression du téléchargement des listes de paquets depuis les dépôts.

Ensuite, installez le paquet at à l'aide de la commande apt-get. L'option -y confirme automatiquement l'installation, vous n'aurez donc pas de validation manuelle à faire.

sudo apt-get install -y at

La sortie affichera la progression de l'installation. Une fois terminée, la commande at sera disponible sur votre système.

La commande at dépend d'un service d'arrière-plan (démon) appelé atd pour exécuter les tâches planifiées. Nous devons nous assurer que ce service est bien en cours d'exécution. Vous pouvez vérifier son état avec la commande systemctl.

sudo systemctl status atd

La sortie devrait indiquer que le service est active (running).

● atd.service - Deferred execution scheduler
     Loaded: loaded (/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
     Active: active (running) since <date_time>; <time_ago>
       Docs: man:atd(8)
   Main PID: <pid> (atd)
      Tasks: 1 (limit: 4622)
     Memory: 248.0K
        CPU: 11ms
     CGroup: /system.slice/atd.service
             └─<pid> /usr/sbin/atd -f

Si le service n'est pas actif, vous pouvez le démarrer avec la commande suivante :

sudo systemctl start atd

Enfin, vérifions que le service cron est également actif, car nous l'utiliserons dans une étape ultérieure.

sudo systemctl status cron

La sortie devrait également afficher active (running), confirmant que le démon cron est prêt à gérer les tâches planifiées.

● cron.service - Regular background program processing daemon
     Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
     Active: active (running) since <date_time>; <time_ago>
       Docs: man:cron(8)
   Main PID: <pid> (cron)
      Tasks: 1 (limit: 4622)
     Memory: 1.1M
        CPU: 40ms
     CGroup: /system.slice/cron.service
             └─<pid> /usr/sbin/cron -f

Les services atd et cron étant tous deux opérationnels, votre environnement est maintenant prêt pour la planification de processus.

Planifier une tâche ponctuelle avec la commande at

Dans cette étape, vous apprendrez à utiliser la commande at pour planifier une tâche qui ne sera exécutée qu'une seule fois à un moment futur. Cela est utile pour lancer des scripts ou des commandes que vous n'avez pas besoin d'exécuter immédiatement, mais qui ne nécessitent pas non plus de répétition régulière. La commande at lit une série de commandes depuis l'entrée standard et les regroupe dans un seul "travail at" qui sera exécuté à l'heure spécifiée.

Planifions une commande simple qui créera un fichier nommé at_output.txt dans votre répertoire de projet actuel (~/project). Nous allons programmer son exécution dans une minute.

Tout d'abord, appelez la commande at avec la spécification de temps souhaitée.

at now + 1 minute

Après avoir appuyé sur Entrée, l'invite de votre terminal se transformera en at>. Cela indique que at attend que vous saisissiez les commandes que vous souhaitez planifier. Maintenant, tapez la commande pour créer le fichier et y écrire du texte.

echo "The at job executed successfully." > ~/project/at_output.txt

Appuyez sur Entrée après avoir tapé la commande. Pour finaliser la tâche et quitter l'invite at>, appuyez sur Ctrl-D (maintenez la touche Ctrl et appuyez sur D). Vous verrez un message de confirmation indiquant que la tâche a été planifiée, ainsi que son numéro de travail et l'heure d'exécution.

warning: commands will be executed using /bin/sh
job 1 at Mon Jan 1 12:01:00 2024

Maintenant, vous devez attendre une minute pour que la tâche planifiée s'exécute.

Une fois la minute écoulée, vous pouvez vérifier que la tâche a été exécutée en contrôlant l'existence du fichier at_output.txt. Utilisez la commande ls -l pour voir les détails du fichier.

ls -l ~/project/at_output.txt

Si la tâche s'est déroulée avec succès, le fichier apparaîtra dans la liste.

-rw-r--r-- 1 labex labex 35 Jan  1 12:01 /home/labex/project/at_output.txt

Ensuite, visualisez le contenu du fichier à l'aide de la commande cat pour vous assurer que la commande echo a fonctionné comme prévu.

cat ~/project/at_output.txt

Vous devriez voir le résultat suivant dans votre terminal :

The at job executed successfully.

Enfin, pour garder votre répertoire de projet propre pour les étapes suivantes, supprimez le fichier que vous venez de créer.

rm ~/project/at_output.txt

Vous avez maintenant réussi à planifier, vérifier et nettoyer une tâche ponctuelle à l'aide de la commande at.

Gérer les tâches en attente avec atq et atrm

Dans cette étape, vous apprendrez à visualiser et à annuler les tâches at planifiées. Il est courant de planifier une tâche et de se rendre compte plus tard qu'elle n'est plus nécessaire ou qu'elle doit être modifiée. La commande atq vous permet de voir la file d'attente des travaux en attente, et la commande atrm vous permet de les supprimer.

Tout d'abord, planifions une tâche suffisamment loin dans le futur pour avoir le temps de la gérer. Nous allons programmer une commande pour qu'elle s'exécute dans 10 minutes.

at now + 10 minutes

À l'invite at>, saisissez une commande pour créer un fichier. Nous nommerons ce fichier temporary_job.txt.

touch ~/project/temporary_job.txt

Appuyez sur Entrée, puis sur Ctrl-D pour enregistrer la tâche. Le système confirmera la création de la tâche et affichera son numéro de travail. Notez bien ce numéro de travail, car vous en aurez besoin pour supprimer la tâche.

warning: commands will be executed using /bin/sh
job 2 at Mon Jan 1 12:10:00 2024

(Note : Votre numéro de travail et l'heure seront différents.)

Maintenant, pour voir la liste de toutes vos tâches en attente, utilisez la commande atq (at queue).

atq

La sortie listera votre tâche planifiée, affichant son numéro de travail, la date et l'heure prévues, la file d'attente dans laquelle elle se trouve (a), et l'utilisateur qui l'a planifiée.

2 Mon Jan 1 12:10:00 2024 a labex

Supposons que vous ayez décidé que vous ne voulez plus que cette tâche s'exécute. Vous pouvez l'annuler en utilisant la commande atrm (at remove), suivie du numéro de travail que vous avez noté précédemment.

Remplacez <job_number> dans la commande ci-dessous par votre numéro de travail réel. Par exemple, si votre numéro de travail était 2, vous exécuteriez atrm 2.

atrm <job_number>

La commande ne produira aucune sortie si elle parvient à supprimer la tâche.

Pour vérifier que la tâche a bien été retirée de la file d'attente, exécutez à nouveau atq.

atq

Cette fois, la commande ne devrait produire aucune sortie. Ce silence confirme que votre file d'attente at est vide et que le fichier temporary_job.txt ne sera pas créé.

Créer une tâche récurrente avec crontab -e

Dans cette étape, vous apprendrez à planifier une tâche récurrente à l'aide de cron. Contrairement à at, qui exécute une tâche une seule fois, cron est conçu pour exécuter des travaux de manière répétée selon un calendrier. Vous gérerez vos tâches planifiées dans un fichier spécial appelé crontab.

Pour modifier le fichier crontab de votre utilisateur, vous utilisez la commande crontab -e. Le -e signifie "edit" (modifier).

Ouvrons le fichier crontab pour le modifier.

crontab -e

Si c'est la première fois que vous lancez crontab -e, il se peut que l'on vous demande de choisir un éditeur de texte par défaut. Nous recommandons nano car il est facile à utiliser.

Select an editor. To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.basic
  ...

Choose 1-2 [1]:

Appuyez sur 1 puis sur Enter pour sélectionner nano. Le fichier crontab s'ouvrira. Il sera principalement vide, à l'exception de quelques commentaires expliquant comment l'utiliser.

Une entrée crontab possède un format spécifique avec six champs : minute heure jour-du-mois mois jour-de-la-semaine commande

Un astérisque (*) dans un champ temporel agit comme un caractère générique, signifiant "chaque". Pour notre tâche, nous voulons exécuter une commande chaque minute. C'est idéal pour tester car nous n'aurons pas à attendre longtemps pour voir le résultat. La planification pour "chaque minute" est * * * * *.

Maintenant, ajoutez une nouvelle ligne à la fin du fichier pour planifier une tâche qui ajoute la date et l'heure actuelles à un fichier journal nommé cron_log.txt dans votre répertoire de projet.

* * * * * date >> ~/project/cron_log.txt

Après avoir ajouté la ligne, votre éditeur devrait ressembler à ceci :

## Edit this file to introduce tasks to be run by cron.
#
## Each task to run has to be defined through a single line
## indicating with different fields when the task will be run
## and what command to run for the task
#
## To define the time you can provide concrete values for
## minute (m), hour (h), day of month (dom), month (mon),
## and day of week (dow) or use '*' in these fields (for 'any').
#
## Notice that tasks will be started based on the cron's system
## daemon's notion of time and timezones.
#
## Output of the crontab jobs (including errors) is sent through
## email to the user the crontab file belongs to (unless redirected).
#
## For example, you can run a backup of all your user accounts
## at 5 a.m. every week with:
## 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
## For more information see the manual pages of crontab(5) and cron(8)
#
## m h  dom mon dow   command
* * * * * date >> ~/project/cron_log.txt

Pour enregistrer le fichier et quitter nano, appuyez sur Ctrl-X, puis sur Y pour confirmer les modifications, et enfin sur Enter pour valider le nom du fichier.

Une fois sorti, vous verrez un message de confirmation dans votre terminal :

crontab: installing new crontab

Cela signifie que votre nouvelle tâche cron est active. Le démon cron va maintenant vérifier ce fichier chaque minute et exécuter votre commande.

Attendez au moins une minute. Ensuite, vérifiez que le fichier journal a été créé.

ls -l ~/project/cron_log.txt

Vous devriez voir le fichier listé.

-rw-r--r-- 1 labex labex 29 Jan  1 12:15 /home/labex/project/cron_log.txt

Maintenant, visualisez son contenu.

cat ~/project/cron_log.txt

La sortie affichera la date et l'heure auxquelles la commande a été exécutée pour la première fois.

Mon Jan  1 12:15:01 UTC 2024

Si vous attendez une minute de plus et relancez la commande cat, vous verrez une nouvelle ligne avec un horodatage mis à jour, prouvant que la tâche s'exécute de manière répétée.

Vérifier et supprimer une tâche Cron avec crontab -l et -r

Dans cette dernière étape, vous apprendrez à visualiser vos tâches cron planifiées sans ouvrir l'éditeur et à les supprimer entièrement. Ce sont des tâches de gestion essentielles pour maintenir les tâches planifiées de votre système organisées et propres.

Tout d'abord, listons les tâches cron actuellement actives. La commande crontab -l (où -l signifie "list") affiche le contenu de votre fichier crontab directement dans le terminal.

crontab -l

La sortie affichera la tâche que vous avez créée à l'étape précédente.

## Edit this file to introduce tasks to be run by cron.
## ... (autres commentaires) ...
## m h  dom mon dow   command
* * * * * date >> ~/project/cron_log.txt

Cette commande est un moyen sûr, en lecture seule, de vérifier quelles tâches sont planifiées.

Maintenant, supposons que vous n'ayez plus besoin de cette tâche récurrente. Pour la supprimer, vous pouvez utiliser la commande crontab -r (où -r signifie "remove"). Soyez très prudent avec cette commande, car elle supprime l'intégralité du fichier crontab de votre utilisateur sans demander de confirmation.

Exécutez la commande pour supprimer votre crontab.

crontab -r

La commande ne produira aucune sortie si elle réussit.

Pour vérifier que votre crontab a bien été supprimée, lancez à nouveau la commande de liste.

crontab -l

Cette fois, la commande renverra un message d'erreur indiquant que vous n'avez plus de fichier crontab.

no crontab for labex

Cela confirme que votre tâche planifiée a été supprimée avec succès et ne s'exécutera plus.

Enfin, pour terminer l'atelier et nettoyer votre espace de travail, supprimez le fichier cron_log.txt qui a été créé par la tâche cron.

rm ~/project/cron_log.txt

Vous avez maintenant réussi à lister, supprimer et vérifier la suppression d'une tâche cron, complétant ainsi le cycle de gestion complet.

Résumé

Dans cet atelier, vous avez appris à préparer un environnement Linux pour la planification de tâches en installant le paquet at et en vérifiant que les services atd et cron étaient actifs. Vous vous êtes exercé à planifier une tâche ponctuelle pour une exécution future à l'aide de la commande at. Vous avez également appris à gérer ces tâches en attente en visualisant la file d'attente avec atq et en supprimant une tâche spécifique avec atrm.

De plus, vous avez exploré comment planifier des tâches récurrentes à l'aide de cron. Vous avez utilisé la commande crontab -e pour modifier le fichier crontab de l'utilisateur et ajouter une nouvelle tâche automatisée. Enfin, vous avez appris à vérifier la liste des tâches cron actuellement planifiées avec crontab -l et à supprimer toutes les tâches cron d'un utilisateur à l'aide de la commande crontab -r.