Comment planifier des tâches à l’aide de la commande at sous Linux
Apprendre à planifier et à gérer des tâches à l’aide du programme at
Exigences
- Autorisations root pour démarrer le démon atd
- Avoir installé le programme at
Difficulté
FACILE
Conventions
- # – nécessite que les commandes Linux données soient exécutées avec les privilèges root, soit
directement en tant qu’utilisateur root, soit en utilisant la commandesudo - $ – nécessite que des commandes Linux données soient exécutées en tant qu’utilisateur régulier non privilégié
Introduction
Lors de l’administration d’un système, être capable de planifier une tâche pour une exécution ultérieure c’est une capacité cruciale : effectuer une sauvegarde d’une base de données par exemple, ou peut-être exécuter un script de maintenance. Moins connu que cron ou anacron, le programme at nous permet de le faire de manière assez simple : dans ce tutoriel, nous allons apprendre comment l’utiliser et en quoi il est différent des programmes mentionnés ci-dessus.
Qu’est-ce qu’il y a ?
Contrairement à cron, qui nous permet d’exécuter une tâche sur une base régulière, at nous donne la possibilité d’exécuter une commande ou un script à une date et une heure spécifiées, ou après un intervalle de temps donné. Les minutes, les heures, les jours ou les semaines peuvent être utilisés comme unités. Il est même possible d’utiliser certains « mots-clés » comme minuit ou l’heure du thé (ce qui correspond à 16h).
Installation à
S’il n’est pas installé par défaut, at devrait être disponible dans presque tous les dépôts de distributions.
Pour l’installer sur Fedora, il suffit d’exécuter :
dnf install atSur RHEL ou CentOS, yum est toujours le gestionnaire de paquets par défaut :
yum install atSur Debian ou Ubuntu :
apt-get install atSur Archlinux :
pacman -S atDémarrage du démon
Une fois le programme installé, nous devons démarrer le démon atd et éventuellement l’activer si nous voulons qu’il soit lancé automatiquement au démarrage. Je vais supposer ici l’utilisation de systemd comme système d’initialisation. La commande doit être exécutée avec les privilèges root :
systemctl enable --now atd.servicePlanification d’une tâche à partir de l’invite at
Avec tout en place, nous pouvons maintenant utiliser à. Supposons que nous voulions exécuter une commande dans 1 minute. La syntaxe correcte serait :
at now + 1 minutePour exécuter la même commande à 16 heures, dans trois jours, à la place, nous exécuterions :
at 4pm + 3 daysUne fois la ligne ci-dessus exécutée, l’invite at apparaîtra, attendant que nous entrions la commande à exécuter après l’intervalle de temps spécifié :
at now + 1 minutes
at> echo "Hello world" > test.txt
at>
job 4 at Tue Dec 19 11:29:00 2017
Pour quitter l’invite at, nous devons appuyer sur la combinaison de touches CTRL+d. À ce stade, nous présenterons un résumé de la tâche planifiée, qui nous montrera l’identifiant du travail (4 dans ce cas) et la date à laquelle il sera exécuté.
À titre d’exemple, nous avons entré une commande triviale pour montrer comment fonctionne at. Dans une minute, la chaîne « Hello world » sera écrite dans le fichier test.txt, qui sera automatiquement créé s’il n’existe pas déjà.
Planifier l’exécution d’un script
Au lieu de spécifier la commande à exécuter, de manière interactive, à partir de l’invite, nous pouvons demander à at d’exécuter un script ou un programme existant simplement en le passant en argument à l’indicateur -f ou, alternativement, en utilisant l’opérateur de redirection <. Par conséquent, en supposant que nous voulions exécuter un script présent dans notre répertoire de travail actuel, nous exécuterions :
Using the dedicated -f flag
at now + 1 minute -f script.sh# Utilisation de l’opérateur de redirection < $à maintenant + 1 minute < script.sh
Gérer les tâches planifiées
Pour mettre en file d’attente, examiner ou supprimer des tâches planifiées avec at, nous pouvons soit utiliser des commandes dédiées comme atrm et atq, soit exécuter at avec des drapeaux spécifiques, ces derniers n’étant que des alias pour les premiers. Par exemple, supposons que nous souhaitions obtenir une liste de tous les travaux en attente planifiés avec at par notre utilisateur :
$ atq
4 Tue Dec 19 11:29:00 2017 a egdoc
La commande ci-dessus, si elle est lancée en tant que root, affichera la tâche planifiée par tous les utilisateurs du système.
Pour supprimer une tâche en file d’attente, nous pouvons utiliser atrm ou exécuter at avec les drapeaux équivalents : -r ou -d. Le travail à supprimer doit être référencé par son numéro. Dans le cas ci-dessus, on exécuterait donc :
$ atrm 4Conclusions
Bien que plus simple que cron ou anacron, le programme at peut être très utile dans certaines situations : pour exécuter un programme avec un délai spécifique ou lorsque vous savez exactement le temps dans lequel la tâche doit être exécutée. Reportez-vous au manuel pour plus d’informations, et ajoutez ce petit outil à votre boîte à outils, il vous sera sûrement utile.