Main menu:

Site search

Categories

août 2008
L M M J V S D
 123
45678910
11121314151617
18192021222324
25262728293031

Archive

Planification de tâches – la commande at

Lorsque vous voulez planifier le lancement d’une tâche de manière répétitive (tous le jours, toutes les heures, le 1er janvier…) vous utilisez la command cron. Par contre, si cette tâche ne doit être lancée qu’une seule fois, vous utiliserez la command at.
La commande at est une commande très facile à utiliser. Il suffit de taper dans un terminal at suivi de l’heure, le jour où la tâche devra être exécutée. Par exemple:

$ at 16:45
$ at 16:45 010109
$ at midnight
$ at now  # très utile pour les tests
$ at 16:45 + 3 days

Elle s’utilise soit de façon interactive soit en ligne de commande.

Méthode interactive

Vous tapez dans un terminal la commande at suivi de l’heure, le jour… et en retour vous obtenez un prompt qui vous permet de taper la commande à lancer à l’heure dite. Pour sortir, tapez Ctrl+D.

$ at 16:45
warning: commands will be executed using /bin/sh
at> backup.sh
at> 
job 14 at Sun Aug 17 16:45:00 2008

Essayons maintenant de lancer la calculatrice Gnome à une certaine heure:

$ at 16:45
warning: commands will be executed using /bin/sh
at> gcalctool
at> 
job 15 at Sun Aug 17 16:45:00 2008

Et…à l’heure promise, rien ne se passe. Pourquoi?
Parce que at utilise /bin/sh et que toutes les variables d’environnement sont transmises à l’exception de TERM, DISPLAY et « _ ». Cela signifie simplement, dans notre cas, que at ne sait pas dans quel DISPLAY afficher le programme puisque votre variable d’environnement DISPLAY ne lui est pas transmise. Pour résoudre ce problème, il suffit de dire à la commande at sur quel DISPLAY afficher la calculatrice Gnome.

$ at 11:51
warning: commands will be executed using /bin/sh
at> export DISPLAY=:0.0
at> gcalctool
at> 
job 15 at Sun Aug 17 11:51:00 2008

Notez la commande export DISPLAY=:0.0.

Méthode en ligne de commande

at attend la tâche à exécuter sur son entrée standard (stdin) et non pas comme paramètre de la commande. Cela signifie que la tâche ne peut pas être transmise à la commande at en argument. C’est la que les redirections sous Linux interviennent. Relisez éventuellement mon article Shell – Redirections de flux.
Nous allons utilser un pipe ‘|’ pour rediriger la sortie standard (stdout) d’un programme vers l’entrée standard (stdin) de la commande at.

$ echo "backup.sh" | at 16:45

On prend la sortie standard de la commande echo et on la redirige vers l’entrée standard de la commande at grâce au pipe. C’est aussi simple que ça.
Vous voulez lancer la calculatrice Gnome? Là aussi, vous devez préciser le DISPLAY à utiliser.

$ echo "export DISPLAY=:0.0;gcalctool" | at 16:45

Pour supprimer une tâche, utilisez atrm suivi du numéro de la tâche. Pour afficher toutes les tâches qui sont pendantes, utilisez atq.
N’oubliez pas de consulter la page de manuel de at pour avoir tous les détails.

Comments

Comment from squeek
Time: 19 janvier 2013, 18 h 17 min

Bonjour, je vais peut-être paraître bien candide, mais j’aimerais savoir à quoi correspond export DISPLAY=:0.0 ? quel est le but de cette commande ? pourquoi ce choix de 0.0, cela correspond à quoi ?
Merci pour ces précisions et super article !!

Comment from Michel Leunen
Time: 19 janvier 2013, 18 h 37 min

@squeek
DISPLAY est une variable d’environnement qui doit être initialisée à une certaine valeur.
La syntaxe exacte est:
DISPLAY=[host]:.[screen]
host et screen sont optionnels.
L’affichage sous linux se fait en connectant un client à un serveur X. Chaque client peut avoir plusieurs display et chaque display, plusieurs screens.