Gestion des services

at : Planifier des tâches ultérieurement

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières

Introduction



La commande at est un outil puissant sous Linux qui permet de planifier des tâches ponctuelles à exécuter ultérieurement.
Cela peut être particulièrement utile pour automatiser des actions à un moment précis dans le futur sans avoir à être connecté sur le système;

Dans cet article, nous allons voir l'utilisation de la commande "at" ainsi que des exemples concrets pour mieux comprendre son fonctionnement.

Contrairement au planificateur de tâches "cron", qui exécute des tâches de façon périodique (tous les jours à 22:00, tous les lundis à 5:00, toutes les 6 heures...) les tâches planifiées s'exécutent qu'une fois.
Si vous souhaitez plus d'informations sur le planificateur de tâches, consultez cron-et-crontab-le-planificateur-de-taches


Installation



Le service atd est souvent installé par défaut sur les distributions linux. Cependant, si tel n'est pas le cas, installez-le :

Fedora, RedHat et dérivées :
Code BASH :
dnf install at


Debian et dérivées :
Code BASH :
apt install at


Gentoo :
Code BASH :
emerge -av sys-process/at 


Et on active et démarre le service :
Systemd :
Code BASH :
systemctl enable --now atd


OpenRC :
Code BASH :
rc-update add atd 
/etc/init.d/atd start


Utilisation



Création de tâches



La commande at est interactive, elle peut être lancée en précisant la date d'exécution :

Pour exécuter la tâche à 17h :
Code BASH :
at 17:00


On peut aussi demander à une période définie par rapport à maintenant :
Code BASH :
at now + 30 minutes


A partir de là, un prompt indique que nous sommes prêt à taper des commandes qui seront exécutées :
Code :
at>


Une fois qu'on a saisi la ou les commandes, on quitte le sous menu avec Ctrl+D

Au moment de la sortie, on a une information nous indiquant la date d'exécution de la tâche avec son numéro :
Code TEXT :
job 6 at Mon Jun 19 19:00:00 2023


On peut lancer une commande sans rentrer dans le mode interactif de cette façon :

Code BASH :
echo "ma commande" | at now + 5 minutes


On peut aussi exécuter un fichier de script (ou une suite de commandes dans un fichier) via l'option -f :

Code BASH :
at 21:00 -f /root/monscript.sh



Lister les tâches et voir les détails



Pour lister les tâches planifiées dans la file d'attente, on pourra utiliser :

Code BASH :
atq


Code TEXT :
4       Mon Jun 19 18:30:00 2023 a root
6       Mon Jun 19 19:00:00 2023 a root


Pour avoir des détails sur une tâche précise, on utilisera la commande suivante :

Code BASH :
at -c JOB


Remplacez JOB par le numéro du job.
Notez que vous n'avez pas QUE la commande mais aussi tout le contexte d'exécution.

Annuler des tâches



Pour annuler une tâche, on utilisera la commande :

Code BASH :
atrm JOB


Remplacez JOB par le numéro du job.

Logs des tâches



Il est possible de vérifier si les tâches planifiées se sont bien lancées dans les logs.

Avec systemd :

Code BASH :
journalctl -u atd


Code :
sept. 18 15:39:00 SERVER.LINUXTRICKS.LAN atd[6372]: Starting job 1 (a0000101af1273) for user 'root' (0)
sept. 18 15:39:00 SERVER.LINUXTRICKS.LAN atd[6372]: pam_unix(atd:session): session opened for user root(uid=0) by (uid=0)
sept. 18 15:45:00 SERVER.LINUXTRICKS.LAN atd[9125]: Starting job 3 (a0000301af1279) for user 'root' (0)
sept. 18 15:45:00 SERVER.LINUXTRICKS.LAN atd[9125]: pam_unix(atd:session): session opened for user root(uid=0) by (uid=0)



Sinon, les informations sont stockées généralement dans /var/log/cron :


Code :
Sep 18 15:39:00 SERVER atd[6372]: Starting job 1 (a0000101af1273) for user 'root' (0)
Sep 18 15:45:00 SERVER atd[9125]: Starting job 3 (a0000301af1279) for user 'root' (0)