Planifier des commandes Linux avec `at`

- 2 minutes de lecture

Traductions

Comme je prĂ©pare et exĂ©cute beaucoup de scripts, j’ai parfois besoin d’exĂ©cuter un script Ă  une heure prĂ©cise de la journĂ©e.

Lorsqu’un script ne doit ĂȘtre exĂ©cutĂ© qu’une seule fois, cron n’est pas une solution viable. J’ai donc dĂ©couvert le planificateur at.

Vous devez d’abord l’installer, en utilisant apt comme d’habitude pour les utilisateurs de debian, ubuntu ou autre dĂ©rivĂ©s :

$ sudo apt install at

Planifier l’exĂ©cution d’une commande

  1. utilisez la commande at avec une heure / date
  2. saisissez les commandes Ă  exĂ©cuter dans l’invite
  3. tapez CTRL+D pour quitter (^D)
$ at 9AM       
warning: commands will be executed using /bin/sh
at> cd workspaces/github/dotfiles
at> git pull
at> < EOT >
job 1 at Sat Apr 16 09:00:00 2022

Cet exemple va rĂ©cupĂ©rer le contenu d’un dĂ©pĂŽt Ă  9h demain matin !

at prend en charge de nombreuses spécifications de temps.

Voici un extrait de sa page de manuel :

At permet d’indiquer l’heure de lancement de maniĂšre assez complexe, en extension de la norme POSIX.2. Il accepte des spĂ©cifications de la forme HH:MM pour exĂ©cuter un travail Ă  une heure donnĂ©e de la journĂ©e en cours (ou du lendemain si l’heure mentionnĂ©e est dĂ©jĂ  dĂ©passĂ©e). On peut aussi lui fournir l’un des arguments suivants : midnight (minuit), noon (midi), ou teatime (l’heure du thĂ©, soit 16 heures). Il est Ă©galement possible de fournir un suffixe du type AM (matin), ou PM (aprĂšs-midi) avec une heure sur un cadran de 12 heures.

Les commandes sont exĂ©cutĂ©es avec le compte de l’utilisateur connectĂ©, en utilisant un shell /bin/sh. Il utilisera les variables d’environnement disponibles du shell au moment oĂč la commande at est exĂ©cutĂ©e, et se placera dans le rĂ©pertoire courant avant d’exĂ©cuter votre script.

Voir les commandes planifiées

$ atq
1	Sat Apr 16 09:00:00 2022 a jwittouck

Voir les dĂ©tails d’une tĂąche

$ at -c 1


cd /home/jwittouck || {
	 echo 'Répertoire d'exécution inaccessible' >&2
	 exit 1
}
cd workspaces/github/dotfiles
git pull

Supprimer une tĂąche

$ atrm 1