at

Utilisations de la commande "at" sous UNIX

Sous UNIX, la commande at permet de différer des exécutions de commandes.

Mise en place

La granularité

En règle générale, la commande at est lancée par cron. Dans le fichier /etc/crontab chercher la ligne qui lance atrun et contrôler la fréquence de lancement. Sous FreeBSD, par exemple, la fréquence d'exécution est de 5 minutes. Si vous désirer lancer des commandes at avec une granularité inférieure, il faut modifier la fréquence dans le fichier /etc/crontab.

droits d'exécutiion

Par défaut, les utilisateurs ne sont pas autorisés à exécuter des commandes at. Il faut donc créer un fichier /var/at/at.allow dans lequel on indique la liste des utilisateur autorisés à exécuter des commandes at, une ligne par utilisateur. En fonction du système, ce fichier peut changer de nom ou d'emplacement. N'hésitez pas à consulter le man at pour vous en assurer.

Utilisation

Une fois la granularité et les droits définis, il ne reste plus qu'à utiliser at.

Les commandes

Pour lancer une commande at, il suffit d'appeler at avec un certain nombre de paramètres. Le principal, est la ou les commandes à exécuter. Il s'agit d'un fichier contenant les commandes au format shell sans l'en-tête d'exécution #!/bin/sh. Par exemple, le shell suivant test-at.sh :

#!/bin/sh
echo "un test at" >> /tmp/test-at.txt

qui s'exécute habituellement seul lorsqu'il possède les droits d'exécution, devra être de la forme (test.at) :

echo "un test at" >> /tmp/test-at.txt

Manuellement, pour exécuter un script sans en-tête, il suffit d'utiliser la commande suivante :

sh test.at

at lance le script de la même façon. En fonction du système, le shell utilisé est différent. Mais l'on peut modifier le shell utilisé par une option.

at lance le script avec l'option -f. Dans notre exemple :

at -f test.at

L'heure d'exécution

Pour lancer des commandes en différé, il faut indiquer l'heure à laquelle il faut lancer at. Pour cela, l'on peut utiliser plusieurs formalismes :

  • le format ISO [CC][YY]MMDDhhmm[.SS] : si le siècle (CC) et l'année (YY) ne sont pas précisés, c'est le siècle et l'année en cours qui sont choisis. le format ISO est le format standard, il est donc recommandé de l'utiliser systématiquement. Il est généré par la commande date +%Y%m%d%H%M.%S'. Dans ce cas, il faut indiquer à at qu'on utilise le format ISO grâce à l'option -t : at -t 200807011252 -f ma_commande .

  • l'heure du jour : si l'exécution demandée est dans la journée, l'heure lui suffira. Deux formats existent : HHmm ou HH:mm. at -f test.at 14:00.

  • les mots clefs tomorrow (demain), midnight (minuit), noon (midi), teatime (4PM), am (matin), pm (après midi), today (aujourd'hui) peuvent être utilisés. at -f test.at 1am tomorrow, pour une exécution demain à une heure du matin, etc.

  • l'on peut aussi effectuer des opérations. La date est alors interprétée de la façon suivante : maintenant + nombre unité_de_temps. unité_de_temps peut être minutes (minutes), hours (heures), days (jours), weeks (semaines), months (mois) ou years (années). Par exemple : at -f test.at 4am + 3 days.

Pour d'autres formats, consultez le man at.

File d'attente

file d'attente

type de travaux

a

travaux soumis avec la commande at

b

travaux batch

c

travaux soumis par le cron

d

travaux sync

e

travaux Korn Shell

f

travaux C Shell

Pour consulter une file d'attente spécifique, il suffit d'utiliser l'option q. Par exemple :

at -l -q c

pour obtenir la liste des travaux en attente sur la file d'attente c - travaux soumis par le cron -.

Pour aller plus loin : batch

batch est une commande UNIX associée à at, mais qui possède la particularité de ne lancer les commandes que lorsque les ressources de la machine sont utilisées en dessous d'un certain niveau. Sous FreeBSD, par exemple, lorsque le système n'est utilisé qu'au maximum à 1,5%. Cette commande peut être utile donc pour lancer des commandes lorsque la machine est peu utilisée, dans une période creuse.

Pour lancer une commande batch, l'on peut soit utiliser batch directement, ou utiliser at -b.