at
est un utilitaire de ligne de commande qui vous permet de planifier l'exécution de commandes à un moment donné. Emplois créés avec at
ne sont exécutés qu'une seule fois.
Dans cet article, nous vous expliquerons comment utiliser at
et ses utilitaires compagnons batch
, atq
, atrm
pour afficher, supprimer et créer des tâches à exécuter ultérieurement.
Installation de at
#
Selon la distribution, at
peut ou non être présent sur votre système Linux.
Si at
n'est pas installé, vous pouvez facilement l'installer en utilisant le gestionnaire de paquets de votre distribution.
-
Installer
at
sur Ubuntu et Debiansudo apt update
sudo apt install at
-
Installer
at
sur CentOS et Fedorasudo yum install at
Une fois le programme installé, assurez-vous que atd
, le démon de planification est en cours d'exécution et configuré pour démarrer au démarrage :
sudo systemctl enable --now atd
Comment utiliser le at
Commande #
La syntaxe simplifiée pour le at
commande est la suivante :
at [OPTION...] runtime
Le at
la commande prend la date et l'heure (runtime
) lorsque vous souhaitez exécuter le travail en tant que paramètre de ligne de commande, et la commande à exécuter à partir de l'entrée standard.
Créons une tâche qui sera exécutée à 9h00 :
at 09:00
Une fois que vous avez appuyé sur Enter
, vous serez présenté avec le at
invite de commande qui commence le plus souvent par at>
. Vous voyez également un avertissement qui vous indique le shell dans lequel la commande s'exécutera :
warning: commands will be executed using /bin/sh
at>
Saisissez une ou plusieurs commandes que vous souhaitez exécuter :
tar -xf /home/linuxize/file.tar.gz
Lorsque vous avez terminé d'entrer les commandes, appuyez sur Ctrl-D
pour quitter l'invite et enregistrer la tâche :
at> <EOT>
job 4 at Tue May 5 09:00:00 2020
La commande affichera le numéro de la tâche ainsi que l'heure et la date d'exécution.
Il existe également d'autres moyens de transmettre la commande que vous souhaitez exécuter, en plus d'entrer la commande dans le at
rapide. Une façon consiste à utiliser echo
et dirigez la commande vers at
:
echo "command_to_be_run" | at 09:00
Une autre option consiste à utiliser Here document :
at 09:00 <<END
command_to_be_run
END
Pour lire les commandes à partir d'un fichier au lieu de l'entrée standard, appelez la commande avec -f
option suivie du chemin d'accès au fichier. Par exemple, pour créer un travail qui exécutera le script /home/linuxize/script.sh
:
at 09:00 -f /home/linuxize/script.sh
Par défaut, si la commande produit une sortie, at
enverra un e-mail contenant la sortie à l'utilisateur une fois le travail terminé. Appelez at
avec le -M
option pour supprimer la notification par e-mail :
at 09:00 -M
Utilisez le -m
pour envoyer un e-mail même s'il n'y a pas de sortie :
at 09:00 -m
batch
Commande #
batch
ou son alias at -b
planifie les travaux et les exécute dans une file d'attente batch lorsque le niveau de charge du système le permet. Par défaut, les travaux sont exécutés lorsque la charge moyenne du système est inférieure à 1,5. La valeur de la charge peut être spécifiée lors de l'appel de atd
démon. Si la charge moyenne du système est supérieure à celle spécifiée, les travaux attendront dans la file d'attente.
Pour créer une tâche avec batch
, passez les commandes que vous souhaitez exécuter :
echo "command_to_be_run" | batch
Spécifier l'heure d'exécution #
Le at
accepte un large éventail de spécifications de temps. Vous pouvez spécifier l'heure, la date et l'incrément à partir de l'heure actuelle :
-
Heure - Pour spécifier une heure, utilisez le
HH:MM
ouHHMM
formulaire. Pour indiquer un format d'heure de 12 heures, utilisezam
oupm
après le temps. Vous pouvez également utiliser des chaînes telles quenow
,midnight
,noon
, outeatime
(16h00). Si l'heure spécifiée est dépassée, la tâche sera exécutée le lendemain. -
Date - La commande permet de programmer l'exécution d'un job à une date donnée. La date peut être spécifiée en utilisant le nom du mois suivi du jour et d'une année facultative. Vous pouvez utiliser des chaînes, telles que
today
,tomorrow
, ou en semaine. La date peut également être indiquée à l'aide duMMDD[CC]YY
,MM/DD/[CC]YY
,DD.MM.[CC]YY
ou[CC]YY-MM-DD
formats. -
Incrémenter -
at
accepte également les incréments dans lenow + count time-unit
format, oùcount
est un nombre et unetime-unit
peut être l'une des chaînes suivantes :minutes
,hours
,days
, ouweeks
.
L'heure, la date et l'incrément peuvent être combinés, voici quelques exemples :
-
Planifiez une tâche pour le dimanche à venir à une heure dix minutes plus tard que l'heure actuelle :
at sunday +10 minutes
-
Planifiez une tâche pour qu'elle s'exécute à 13 h 00 dans deux jours :
at 1pm + 2 days
-
Planifiez une tâche à exécuter le 21 octobre 2020 à 12h30 :
at 12:30 102120
-
Planifiez une tâche pour qu'elle s'exécute dans une heure :
at now +1 hours
Vous pouvez également spécifier une heure et une date dans le [[CC]YY]MMDDhhmm[.ss]
en utilisant le -t
option. Voici un exemple :
at -t 202005111321.32
Spécifier la file d'attente #
Par défaut, les travaux créés avec at
sont programmés dans la file d'attente nommée a
et les tâches créées avec batch
sont programmés dans le b
file d'attente.
Les requêtes peuvent avoir un nom à partir de a
à z
et A
à Z
. Les files d'attente avec des lettres inférieures fonctionnent avec une gentillesse inférieure, ce qui signifie qu'elles ont la priorité sur celles avec des lettres supérieures.
Vous pouvez spécifier la file d'attente avec le -q
option. Par exemple, pour définir un travail dans le L
file d'attente, vous exécuteriez :
at monday +2 hours -q L
Liste des travaux en attente #
Pour répertorier les travaux en attente de l'utilisateur, exécutez le atq
ou at -l
commande :
atq
La sortie listera toutes les tâches, une par ligne. Chaque ligne comprend le numéro de travail, la date, l'heure, la lettre de la file d'attente et le nom d'utilisateur.
9 Tue May 5 12:22:00 2020 a linuxize
12 Wed Oct 21 12:30:00 2020 a linuxize
15 Tue May 5 09:00:00 2020 a linuxize
6 Tue May 5 09:00:00 2020 a linuxize
13 Mon May 4 23:08:00 2020 a linuxize
11 Wed Jul 1 10:00:00 2020 a linuxize
4 Tue May 5 09:00:00 2020 a linuxize
Quand atq
est appelé en tant qu'utilisateur administratif, il répertorie les travaux en attente de tous les utilisateurs.
Suppression des tâches en attente #
Pour supprimer une tâche en attente, appelez atrm
ou at -r
commande suivie du numéro de travail. Par exemple, pour supprimer le travail portant le numéro neuf, vous exécuterez :
atrm 9
Restriction des utilisateurs #
Le /etc/at.deny
et /etc/at.allow
les fichiers vous permettent de contrôler quels utilisateurs peuvent créer des travaux avec at
ou batch
commande. Les fichiers consistent en une liste de noms d'utilisateur, un nom d'utilisateur par ligne.
Par défaut, seul le /etc/at.deny
le fichier existe et est vide, ce qui signifie que tous les utilisateurs peuvent utiliser le at
commande. Si vous souhaitez refuser l'autorisation à un utilisateur spécifique, ajoutez le nom d'utilisateur à ce fichier.
Si le /etc/at.allow
le fichier existe seuls les utilisateurs répertoriés dans ce fichier peuvent utiliser le at
commande.
Si aucun des fichiers n'existe, seuls les utilisateurs disposant de privilèges administratifs peuvent utiliser le at
commande.
Conclusion #
Le at
L'utilitaire lit les commandes à partir de l'entrée standard et les exécute ultérieurement. Contrairement à crontab, les tâches créées avec at
ne sont exécutés qu'une seule fois.
Pour plus d'informations sur toutes les options disponibles du at
type de commande man at
dans votre terminal.
Si vous avez des questions, n'hésitez pas à laisser un commentaire.