staging.inyokaproject.org

at

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/terminal.png Das Kommandozeilenprogramm at kann dazu genutzt werden, Programme zu einem bestimmten Zeitpunkt (einmalig) auszuführen, diese Aufträge abzurufen oder zu löschen.

Installation

  • at

Befehl zum Installieren der Pakete:

sudo apt-get install at 

Oder mit apturl installieren, Link: apt://at

Bedienung

Aufgerufen werden kann es durch[2]

at ZEITANGABE 

Anschließend gibt man die gewünschten Befehle ein und schließt die Eingabe mit Strg + D ab.

Die standardmäßig erscheinende Warnung

warning: commands will be executed using /bin/sh

gibt lediglich an, dass die Befehle in der Ubuntu-Standard-Shell Dash und nicht in der Bash ausgeführt werden. Dies hat jedoch keine Konsequenzen, sofern man nicht mit at ein Shell-Skript ausführt, welches Bash-spezifische (bzw. zsh, ksh...) Befehle nutzt.

Der Hinweis kann also im Normalfall einfach ignoriert werden.

Zeitangaben in at
Format Bedeutung
today Heute
tomorrow Morgen
noon tomorrow Um 12:00 Uhr am nächsten Tag; mit at kann auch "teatime" (= 16:00 Uhr) oder "midnight" (= Mitternacht) verwendet werden.
now Jetzt
now + 10min In zehn Minuten; möglich sind auch Angaben zu Stunden ("hours"), Tagen ("days"), Wochen ("weeks") und Monaten ("months") .
20:15 Heute um 20:15 Uhr
09:00pm Heute um 21:00 Uhr (mit Angabe von "am" heute um 9.00 Uhr morgens, ohne Angabe die Zeit im 24-Stunden-Format).
2/23/10 Am 23. Februar 2010; mögliche Schreibweisen für das Datum sind z.B. "2.23.10" und "22310"; der Monat steht hier vor dem Tag.
2010-02-23 Am 23. Februar 2010; das vermutlich etwas weniger verwirrende ISO-Format und alternativ "10-02-23" können auch verwendet werden.

Die Angaben können sinngemäß kombiniert werden, ein Datum muss dabei immer nach einer Uhrzeit angegeben werden! Anders als bei cron-Jobs wird ein at-Job, der beim Rechnerstart bereits in der Vergangenheit liegt, direkt nach dem Rechnerstart ausgeführt (siehe dazu auch anacron). Weitere Einzelheiten in der Manpage des Programms.

Beispiel

Möchte man am 27.10.2019 um 6:30 Früh einen Rechner/Server herunter fahren und ausschalten kann man das folgendermaßen verwirklichen.

at 06:30am 19-10-27 

Anschließend gibt man die gewünschten Befehle ein und schließt die Eingabe mit Strg + D ab.

warning: commands will be executed using /bin/sh
at> shutdown -h now
at> <EOT>
job 1 at Tue Oct 27 06:30:00 2019 

Abgerufen werden können die laufenden Anweisungen mittels

atq 

Dabei werden allerdings nur die Jobnummer und die Ausführungszeit ausgegeben, nicht aber, welches Kommando ausgeführt werden soll.

Diese Angaben kann man in /var/spool/cron/atjobs/ in Erfahrung bringen, dazu sind Root-Rechte[3] nötig. Oder man benutzt den folgenden Befehl:

at -c JOB_ID 

Via

atrm JOB_ID 

können die Aufträge gelöscht werden.

Alternative Syntax

Will man den Befehl nicht interaktiv eingeben, so kann man sich die Umlenkung der Standardeingabe zu Nutzen machen:

echo 'BEFEHL ARGUMENT1 ARGUMENT2 ...' | at ZEITANGABE 

batch

Der Befehl batch, der Teil von at ist, dient dazu, Anweisungen dann auszuführen, wenn die Auslastung des Rechners es zulässt. Die Ausführung erfolgt, sobald die durchschnittliche Systemlast unter 1.5 sinkt, oder dem Wert der in den Spezifikation zum at-Daemon, atd, festgelegt ist.

Problembehebung

Befehle werden nicht gestartet

at ist nicht für die Benutzung mit Programmen mit grafischer Oberfläche gedacht. Wenn der Computer nur von einem einzigen Benutzer ausgeführt wird, ist es jedoch möglich, die Umgebungsvariable DISPLAY zu setzen, somit kann die grafische Oberfläche benutzt werden, sofern der Benutzer eingeloggt ist. Beispiel:

at> DISPLAY=:0 PROGRAMMNAME 

Zu beachten ist, dass der Wert :0 nur für den ersten eingeloggten Benutzer gilt, weitere Benutzer erhalten andere Zahlen. Wenn der Computer von verschiedenen Benutzern benutzt wird, kann man den Wert also nicht fest vorgeben.

Nachträgliche Ausführung von Programmen wenn der Rechner im Suspend-Modus war

Wenn der Rechner in einem Suspend-Modus war, während ein Befehl ausgeführt werden soll, dann kann es vorkommen, dass dieser Befehl nicht direkt nach dem Aufwachen, sondern erst deutlich später ausgeführt wird. Hier hilft es, direkt nach dem Aufwachen ein weiteres Programm mit at zu starten. Um das zu automatisieren kann man folgenden Hook für pm-utils erstellen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/bin/sh

case "$1" in
    hibernate|suspend)
        exit 0
        ;;
    thaw|resume) 
        echo "true" | at now
        ;;
    *)
        exit 1
        ;;
esac

Dadurch wird sofort nach dem Aufwachen der Befehl true mit at ausgeführt, der keine weitere Wirkung hat, außer at zu starten und damit an die anderen Befehle zu "erinnern".

Alternativen

  • Cron bietet die Möglichkeit, regelmäßig auszuführende Aktionen festzulegen, kann aber auch für einzelne Aufrufe verwendet werden.

  • Timer Units erlauben zeitgesteuerte Ausführungen von Service Units

Diese Revision wurde am 6. März 2023 17:59 von user_unknown erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: System, Shell