at (Unix)

Unix-Befehl zur zeitgesteuerten einmaligen Ausführung einer Aufgabe

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.[1] Die meisten dem Standard ähnlichen Systeme verfügen über einen gleichnamigen Befehl mit ähnlichen Eigenschaften.

Arbeitsweise

Bearbeiten

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:

echo "cc -o foo foo.c" | at 13:37

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:

echo "cc -o foo foo.c" | at 2pm + 1 week
echo "cc -o foo foo.c" | at 2pm next week

Der POSIX-Standard enthält eine detaillierte Spezifikation dieser Grammatik und verweist auf die grundsätzlichen Festlegungen der Grammar Conventions.[1][2]

Berechtigungen

Bearbeiten

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.[3]

All das gilt nicht für den Account root, dessen Berechtigung zur Benutzung seiner Queue immer gilt.

Verwendungshinweise

Bearbeiten

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:

echo "cc -o foo foo.c" | TZ= at 13:37

Varianten

Bearbeiten

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

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

Bearbeiten

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

Bearbeiten

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

Bearbeiten
  • at: execute commands at a later time – Open Group Base Specification
  • at(1): at, batch, atq, atrm: queue, examine or delete jobs for later execution – Debian GNU/Linux Ausführbare Programme oder Shell-Befehle Handbuchseite
  • at(1): at, batch: queue, examine or delete jobs for later execution – OpenBSD General Commands Manual

Einzelnachweise

Bearbeiten
  1. a b The Open Group Base Specifications Issue 7, 2018 edition. Abgerufen am 25. April 2019 (englisch).
  2. The Open Group Base Specifications Issue 7, 2018 edition, 1.3 Grammar Conventions. Abgerufen am 16. Mai 2019 (englisch).
  3. IBM Knowledge Center, AIX 7.2, at Command. Abgerufen am 16. Mai 2019 (englisch).
  4. UNIX(TM) TIME-SHARING SYSTEM: UNIX PROGRAMMER’S MANUAL Seventh Edition, Volume 1. Abgerufen am 2. Februar 2021 (englisch).