107.2 Leçon 2
Certification : |
LPIC-1 |
---|---|
Version : |
5.0 |
Thème : |
107 Tâches administratives |
Objectif : |
107.2 Automatisation des tâches d’administration par la planification des travaux |
Leçon : |
2 sur 2 |
Introduction
Comme vous l’avez vu dans la précédente leçon, vous pouvez planifier des tâches régulières en utilisant cron ou les timers de systemd. Or, il peut arriver que vous ayez besoin d’exécuter une tâche une seule fois à un moment donné dans le futur. Pour ce faire, vous pouvez utiliser un autre outil puissant : la commande at
.
Planifier les tâches avec at
La commande at
est utilisée pour la planification d’une seule tâche. Elle nécessite seulement de spécifier à quel moment la tâche devra être exécutée dans le futur. Une fois que vous saisissez at
suivi du temps requis, vous accédez à l’invite at
dans laquelle vous pouvez définir les commandes à exécuter. La combinaison de touches Ctrl+D vous permet alors de quitter cette invite.
$ at now +5 minutes warning: commands will be executed using /bin/sh at> date at> Ctrl+D job 12 at Sat Sep 14 09:15:00 2019
La tâche at
dans l’exemple ci-dessus exécute simplement la commande date
au bout de cinq minutes. Comme pour cron
, la sortie standard et les erreurs vous sont envoyées par e-mail. Notez que le démon atd
doit tourner sur le système pour que vous puissiez utiliser la planification des tâches at
.
Note
|
Sous Linux, la commande |
Voici les options les plus importantes qui peuvent s’appliquer à la commande at
:
-c
-
Afficher les commandes d’un ID de tâche donné sur la sortie standard.
-d
-
Supprimer les tâches en fonction de leur ID. C’est un alias de
atrm
. -f
-
Lire la tâche depuis un fichier au lieu de l’entrée standard.
-l
-
Afficher la liste des tâches en attente de l’utilisateur. Si l’utilisateur est root, toutes les tâches de tous les utilisateurs sont affichées. C’est un alias de
atq
. -m
-
Envoyer un e-mail à l’utilisateur à la fin de la tâche, même en l’absence de résultat.
-q
-
Spécifier une file d’attente sous forme d’une seule lettre de
a
àz
et deA
àZ
(par défauta
pourat
etb
pourbatch
). Les tâches dans les files d’attente avec les lettres les plus élevées sont exécutées avec unnice
plus élevé. Les tâches soumises à une file d’attente en lettres majuscules sont traitées comme des tâchesbatch
. -v
-
Afficher l’heure à laquelle la tâche sera exécutée avant de la lire.
Afficher les tâches planifiées avec atq
Planifions maintenant deux autres tâches at
: la première exécute le script foo.sh
à 09h30, tandis que la seconde exécute le script bar.sh
au bout d’une heure.
$ at 09:30 AM warning: commands will be executed using /bin/sh at> ./foo.sh at> Ctrl+D job 13 at Sat Sep 14 09:30:00 2019 $ at now +2 hours warning: commands will be executed using /bin/sh at> ./bar.sh at> Ctrl+D job 14 at Sat Sep 14 11:10:00 2019
Pour afficher la liste des tâches en attente, vous pouvez utiliser la commande atq
qui présente les informations suivantes pour chaque tâche : ID de la tâche, date et heure d’exécution, file d’attente et nom d’utilisateur.
$ atq 14 Sat Sep 14 11:10:00 2019 a frank 13 Sat Sep 14 09:30:00 2019 a frank 12 Sat Sep 14 09:15:00 2019 a frank
Rappelez-vous que la commande at -l
est un alias de atq
.
Note
|
Si vous lancez |
Supprimer des tâches avec atrm
Si vous voulez supprimer une tâche at
, vous pouvez utiliser la commande atrm
suivie de l’ID de la tâche. Par exemple, pour supprimer la tâche avec l’ID 14, vous pouvez exécuter la commande suivante :
$ atrm 14
Vous pouvez supprimer plusieurs tâches avec atrm
en spécifiant plusieurs ID séparés par des espaces. Rappelez-vous que la commande at -d
est un alias de atrm
.
Note
|
Si vous lancez |
Configurer l’accès à la planification des tâches
L’autorisation pour les utilisateurs ordinaires de planifier des tâches at
est établie par les fichiers /etc/at.allow
et /etc/at.deny
. Si /etc/at.allow
existe, seuls les utilisateurs non-root mentionnés dans ce fichier peuvent planifier des tâches at
. Si /etc/at.allow
n’existe pas mais que /etc/at.deny
existe, les utilisateurs non-root énumérés dans ce fichier n’ont pas le droit de planifier des tâches at
(dans ce cas, un fichier /etc/at.deny
vide signifie que chaque utilisateur a le droit de planifier des tâches at
). Si aucun de ces fichiers n’existe, l’accès des utilisateurs à la planification des tâches at
dépend de la distribution utilisée.
Spécifications horaires
Vous pouvez spécifier l’heure d’exécution de la tâche at
en utilisant le format HH:MM
, éventuellement suivi de AM ou PM pour le format 12 heures. Si l’heure spécifiée est déjà révolue, le lendemain sera pris en compte. Si vous souhaitez programmer une date particulière à laquelle la tâche sera exécutée, vous devez ajouter la date après l’heure en utilisant un des formats suivants : nom-du-mois jour-du-mois
, nom-du-mois jour-du mois année
, MMDDYY
, MM/DD/YY
, DD.MM.YY
et YYYY-MM-DD
).
Les mots-clés suivants sont également acceptés : midnight
, noon
, teatime
(16:00) et now
suivi d’un signe plus (+
) et d’un laps de temps (minutes, heures, jours et semaines). Enfin, vous pouvez demander à at
d’exécuter la tâche aujourd’hui ou demain en faisant précéder l’heure des mots today
ou tomorrow
. Par exemple, vous pouvez utiliser at 07:15 AM Jan 01
pour exécuter une tâche à 07:15 du matin le 1er janvier et at now +5 minutes
pour exécuter une tâche dans cinq minutes à partir de maintenant. Pour en savoir plus sur la définition exacte des spécifications horaires, consultez le fichier timespec
dans l’arborescence /usr/share
.
Une alternative à at
Si vous utilisez systemd comme système d’initialisation, vous pouvez également planifier des tâches ponctuelles avec la commande systemd-run
. Elle est typiquement utilisée pour créer une unité de timer transitoire qui permet d’exécuter une commande à un moment donné sans qu’il soit nécessaire de créer un fichier de service pour autant. Par exemple, en tant que root, vous pouvez exécuter la commande date
à 11:30 du matin le 10 octobre 2019 en utilisant ce qui suit :
# systemd-run --on-calendar='2019-10-06 11:30' date
Et si vous voulez exécuter le script foo.sh
dans votre répertoire courant au bout de deux minutes, vous pouvez utiliser :
# systemd-run --on-active="2m" ./foo.sh
Consultez les pages du manuel systemd-run(1)
pour connaître toutes les utilisations possibles de systemd-run
.
Note
|
Rappelez-vous que les timers sont enregistrés dans le journal de systemd et que vous pouvez consulter les journaux des différentes unités en utilisant la commande |
Exercices guidés
-
Pour chacune des spécifications horaires suivantes, indiquez celles qui sont valides et celles qui sont non valides pour
at
:at 08:30 AM next week
at midday
at 01-01-2020 07:30 PM
at 21:50 01.01.20
at now +4 days
at 10:15 PM 31/03/2021
at tomorrow 08:30 AM
-
Une fois que vous avez planifié une tâche avec
at
, comment pouvez-vous afficher le détail des commandes ? -
Quelles commandes pouvez-vous utiliser pour consulter vos tâches
at
en attente ? Et quelles commandes utiliseriez-vous pour les supprimer ? -
Avec systemd, quelle commande est utilisée comme alternative à
at
?
Exercices d’approfondissement
-
Créez une tâche
at
qui exécute le scriptfoo.sh
dans votre répertoire personnel le 31 octobre prochain à 10h30. Vous travaillez en tant qu’utilisateur ordinaire. -
Connectez-vous au système en tant que nouvel utilisateur ordinaire et créez une autre tâche
at
qui exécute le scriptbar.sh
demain à 10h00. Le script est rangé dans le répertoire personnel de l’utilisateur. -
Reconnectez-vous encore une fois pour changer d’identité et créez une autre tâche
at
qui exécute le scriptfoobar.sh
au bout de 30 minutes. Le script est rangé dans le répertoire personnel de l’utilisateur. -
Connectez-vous en tant que root et lancez la commande
atq
pour passer en revue les tâches planifiéesat
de tous les utilisateurs. Que se passe-t-il si un utilisateur ordinaire exécute cette commande ? -
En tant que root, supprimez toutes ces tâches
at
en attente avec une seule commande. -
Lancez la commande
ls -l /usr/bin/at
et observez les permissions.
Résumé
Voici ce que nous avons appris dans cette leçon :
-
Utiliser
at
pour exécuter des tâches ponctuelles à un moment défini. -
Gérer les tâches
at
. -
Configurer l’accès des utilisateurs à la planification des tâches
at
. -
Utiliser
systemd-run
comme alternative àat
.
Voici les commandes et les fichiers que nous avons abordés dans cette leçon :
at
-
Exécuter des commandes à un moment donné.
atq
-
Afficher la liste des tâches
at
en attente de l’utilisateur, à moins qu’il ne s’agisse du superutilisateur. atrm
-
Supprimer les tâches
at
, identifiées par leur numéro de tâche. /etc/at.allow
and/etc/at.deny
-
Fichiers utilisés pour définir les restrictions de
at
. systemd-run
-
Créer et démarrer une unité de timer transitoire comme alternative à
at
pour la planification ponctuelle.
Réponses aux exercices guidés
-
Pour chacune des spécifications horaires suivantes, indiquez celles qui sont valides et celles qui sont non valides pour
at
:at 08:30 AM next week
Valide
at midday
Non valide
at 01-01-2020 07:30 PM
Non valide
at 21:50 01.01.20
Valide
at now +4 days
Valide
at 10:15 PM 31/03/2021
Non valide
at tomorrow 08:30 AM monotonic
Non valide
-
Une fois que vous avez planifié une tâche avec
at
, comment pouvez-vous afficher le détail des commandes ?Vous pouvez utiliser la commande
at -c
suivie de l’ID de la tâche dont vous souhaitez vérifier les commandes. Notez que le résultat contient également la plupart de l’environnement actif au moment où la tâche a été planifiée. Rappelez-vous que l’utilisateur root peut consulter les tâches de tous les utilisateurs. -
Quelles commandes pouvez-vous utiliser pour consulter vos tâches
at
en attente ? Et quelles commandes utiliseriez-vous pour les supprimer ?Vous pouvez utiliser la commande
at -l
pour consulter vos tâches en attente, et la commandeat -d
pour les supprimer.at -l
est un alias deatq
etat -d
un alias deatrm
. Rappelez-vous que root peut afficher et supprimer les tâches de tous les utilisateurs. -
Avec systemd, quelle commande est utilisée comme alternative à
at
?La commande
systemd-run
peut être utilisée comme alternative àat
pour planifier des tâches ponctuelles. Par exemple, vous pouvez l’utiliser pour exécuter des commandes à un moment précis, en définissant un calendar timer ou un monotonic timer par rapport à différents points de départ.
Réponses aux exercices d’approfondissement
-
Créez une tâche
at
qui exécute le scriptfoo.sh
dans votre répertoire personnel le 31 octobre prochain à 10h30. Vous travaillez en tant qu’utilisateur ordinaire.$ at 10:30 AM October 31 warning: commands will be executed using /bin/sh at> ./foo.sh at> Ctrl+D job 50 at Thu Oct 31 10:30:00 2019
-
Connectez-vous au système en tant que nouvel utilisateur ordinaire et créez une autre tâche
at
qui exécute le scriptbar.sh
demain à 10h00. Le script est rangé dans le répertoire personnel de l’utilisateur.$ at 10:00 AM tomorrow warning: commands will be executed using /bin/sh at> ./bar.sh at> Ctrl+D job 51 at Sun Oct 6 10:00:00 2019
-
Reconnectez-vous encore une fois pour changer d’identité et créez une autre tâche
at
qui exécute le scriptfoobar.sh
au bout de 30 minutes. Le script est rangé dans le répertoire personnel de l’utilisateur.$ at now +30 minutes warning: commands will be executed using /bin/sh at> ./foobar.sh at> Ctrl+D job 52 at Sat Oct 5 10:19:00 2019
-
Connectez-vous en tant que root et lancez la commande
atq
pour passer en revue les tâches planifiéesat
de tous les utilisateurs. Que se passe-t-il si un utilisateur ordinaire exécute cette commande ?# atq 52 Sat Oct 5 10:19:00 2019 a dave 50 Thu Oct 31 10:30:00 2019 a frank 51 Sun Oct 6 10:00:00 2019 a emma
Si vous invoquez la commande
atq
en tant que root, toutes les tâchesat
en attente de tous les utilisateurs sont énumérées. Si vous l’exécutez en tant qu’utilisateur ordinaire, seules vos propres tâchesat
en attente sont affichées. -
En tant que root, supprimez toutes ces tâches
at
en attente avec une seule commande.# atrm 50 51 52
-
En tant que root, lancez la commande
ls -l /usr/bin/at
et observez les permissions.# ls -l /usr/bin/at -rwsr-sr-x 1 daemon daemon 43762 Dec 1 2015 /usr/bin/at
Dans cette distribution, la commande
at
dispose à la fois des bits SUID (caractères
au lieu du fanion exécutable pour le propriétaire) et SGID (caractères
au lieu du fanion exécutable pour le groupe), ce qui signifie qu’elle sera exécutée avec les privilèges du propriétaire et du groupe du fichier (daemon
pour les deux). C’est la raison pour laquelle les utilisateurs ordinaires sont capables de planifier des tâches avecat
.