# LINUX: Programmer l'exécution d'un programme avec at {{METATOC 4-5}} #### Exécuter une commande à une heure précise La commande s'utilise en deux temps. - indiquer à quel moment (quelle heure, quel jour) on désire que la commande soit exécutée. - taper ensuite la commande que l'on veut voir exécutée à l'heure que l'on a indiqué. Il faut donc d'abord indiquer à quelle heure on veut exécuter votre commande, sous la forme HH:MM : L'exécution des commandes est demandée à 14 h 17 aujourd'hui. Si on tape cela dans la console, on devrait voir ceci s'afficher : ``` $ at 14:17 warning: commands will be executed using /bin/sh at> ``` **at** demande de taper les commandes qu'on veut exécuter à cette heure-là. Pour cet exemple, on va demander de créer un fichier à 14 h 17 : ``` $ at 14:17 warning: commands will be executed using /bin/sh at> touch fichier.txt at> job 5 at Mon Nov 10 14:17:00 2010 ``` Après avoir écrit la commande **touch**, **at** affiche à nouveau un prompt et demande une autre commande. On peut indiquer une autre commande à exécuter à la même heure… ou bien arrêter là. Dans ce cas, taper **Ctrl** + **D** (comme si on cherche à sortir d'un terminal). Le symbole `` devrait alors s'afficher, et **at** s'arrêtera. **at** affiche ensuite le numéro associé à cette tâche (à ce « job », comme il dit) et l'heure à laquelle il sera exécuté. #### Exécuter une commande le lendemain ``` $ at 14:17 tomorrow ``` #### Exécuter une commande à une date précise ``` $ at 14:17 11/15/10 ``` La date est au format américain, les numéros du jour et du mois sont donc inversés : 11/15/10. 11 correspond au mois (novembre) et 15 au numéro du jour ! #### Exécuter une commande après un certain délai Il est possible d'exécuter une commande dans 5 minutes, 2 heures ou 3 jours sans avoir à écrire la date. Par exemple, pour exécuter la commande dans 5 minutes : ``` $ at now +5 minutes ``` … ce qui signifie « Dans maintenant (now) + 5 minutes ». Les mots-clés utilisables sont les suivants : - minutes ; - hours (heures) ; - days (jours) ; - weeks (semaines) ; - months (mois) ; - years (années). Un autre exemple : ``` $ at now +2 weeks ``` … exécutera les commandes dans deux semaines. #### atq et atrm : lister et supprimer les jobs en attente Chaque fois qu'une commande est « enregistrée », **at** indique un numéro de job ainsi que l'heure à laquelle il sera exécuté. Il est possible d'avoir la liste des jobs en attente avec la commande **atq** : ``` $ atq 13 Mon Nov 10 14:44:00 2010 a mateo21 12 Mon Nov 10 14:42:00 2010 a mateo21 ``` Pour supprimer le job n° 13 utiliser **atrm** : ``` $ atrm 13 ```