# At (Unix)

at (/usr/bin/at) ist ein Programm zum zeitversetzten Ausführen von Befehlen. Es ist ein vorgeschriebener Bestandteil von UNIX-Systemen und seine Eigenschaften sind durch den POSIX-Standard festgelegt. Die meisten dem Standard ähnlichen Systeme verfügen über einen gleichnamigen Befehl mit ähnlichen Eigenschaften.

## Arbeitsweise

Es wird für (prinzipiell, Einschränkungen siehe unten) jedes Benutzerkonto eine eigene Aufgabenliste – die sogenannte Queue – verwaltet, die leer sein, einen oder mehrere Einträge – sogenannte Jobs – enthalten kann. Neue Einträge werden mit dem at-Kommando vorgenommen und bestehen aus einem ausführbaren Befehl (oder einer Befehlsliste) und einer Uhrzeit, zu der dieser Befehl (diese Befehlsliste) ausgeführt werden soll.
at erwartet das auszuführende Kommando auf <stdin>, die Zeitangabe dagegen als Argument:
bewirkt, dass der Compilerlauf um 13:37 dieses Tages oder, falls dieser Zeitpunkt bereits verstrichen ist, um 13:37 des folgenden Tages gestartet wird.
at kennt auch zahlreiche symbolische Zeitangaben wie z. B. midnight, noon, now oder auch next. Zusätzlich können Zahlen mit einem vorangestellten Pluszeichen (+) verwendet werden, um die Zeitangaben weiter zu modifizieren. Dabei wird der Zahlenwert durch Angabe einer Einheit (minutes, hours, …, years) qualifiziert:
Der POSIX-Standard enthält eine detaillierte Spezifikation dieser Grammatik und verweist auf die grundsätzlichen Festlegungen der Grammar Conventions.

### Berechtigungen

Der Zugang zur Möglichkeit, Jobs in die Queue zu stellen, ist auf Accountebene durch die beiden Dateien at.allow beziehungsweise at.deny (die genaue Lokation ist implementierungsabhängig) geregelt. Beide Dateien enthalten ausschließlich (sofern sie existieren und einen Inhalt haben) durch newlines getrennte Accountnamen.
Existiert keines der beiden Files, so darf kein Account Jobs in seine Queue stellen. Existiert ausschließlich at.allow, so darf jeder Account, der in der Datei erwähnt wird, seine at-Queue benutzen. Existiert at.deny, so ist jeder Account, der nicht in dieser Datei erwähnt wird, zur Benutzung seiner Queue berechtigt. Existieren beide Dateien, so ist die Benutzung für alle Accounts, die entweder in at.deny erwähnt werden oder in at.allow nicht erwähnt wird, verboten, für alle anderen hingegen erlaubt.
All das gilt nicht für den Account root, dessen Berechtigung zur Benutzung seiner Queue immer gilt.

### Verwendungshinweise

Es besteht ein grundlegender Unterschied zwischen standardkonformen Implementierungen und solchen, die sich an BSD orientieren. BSD-artige werten grundsätzlich die Environment-Variable TZ (timezone) bei der Bestimmung des Ausführungszeitpunkts nicht aus, standardkonforme hingegen schon. Das BSD-Verhalten kann allerdings leicht mit konformen Implementationen erreicht werden durch:

## Varianten

Manche Implementationen verwenden den cron-Daemon, um die Aufträge zum passenden Zeitpunkt auszuführen, andere benutzen einen eigenen Daemon namens atd.

### batch

Eine Variante von at ist batch. Hier wird keine Ausführungszeit übergeben, sondern ein mit batch übergebener Job startet dann, wenn der Load der Maschine unter einen Schwellwert fällt (per Default 1,5). Mit diesem Mechanismus kann eine gleichmäßigere Auslastung einer Maschine erreicht werden.

### Andere Betriebssysteme

Unter Windows NT/2000/XP steht at auch zur Verfügung, dort ist dieser Befehl jedoch mittlerweile veraltet. Stattdessen sollte der Taskplaner benutzt werden.

## Geschichte

Das Programm at erschien erstmals im Jahr 1979 als Bestandteil des UNIX Time-Sharing System in Version 7.