[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:sudo: Root-Rechte] }}} [[Inhaltsverzeichnis()]] [[Bild(Wiki/Icons/terminal.png, 48, align=left)]] Das Kommandozeilenprogramm '''at''' kann dazu genutzt werden, Programme zu einem bestimmten Zeitpunkt (einmalig) auszuführen, diese Aufträge abzurufen oder zu löschen. = Installation = Das Programm ist bei jeder Ubuntu-Installation bereits vorinstalliert. Der Paketname lautet: * '''at''' = Bedienung = Aufgerufen werden kann es durch[1] {{{#!vorlage Befehl at ZEITANGABE }}} Anschließend gibt man die gewünschten Befehle ein und schließt die Eingabe mit [[Vorlage(Tasten, 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. {{{#!vorlage Tabelle <-2 rowclass="titel"> 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. }}} 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 [:Cron#anacron:anacron]). Weitere Einzelheiten in der [:man:Manpage] des Programms. Abgerufen werden können die laufenden Anweisungen mittels {{{#!vorlage Befehl 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. Via {{{#!vorlage Befehl atrm PROZESS_ID }}} können die Aufträge gelöscht werden. == Alternative Syntax == `at` kann die Befehle auch direkt von der Standardeingabe lesen, so kann man es zum Beispiel aus Skripten ohne Interaktion verwendet werden: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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 [:Energiesparmodi_mit_ACPI: 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 [:pm-utils#Eigene-Hooks-erstellen: Hook] für [:pm-utils:] erstellen: {{{#!code bash #!/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. = Links = * [http://www.linux-user.de/ausgabe/2006/02/094-zubefehl/ Artikel zu at und cron] {de} aus der Zeitschrift "Linux User" (Ausgabe 02/06) * [http://pwet.fr/man/linux/commandes/posix/at ausführliche Dokumentation] {en} * [:Shell/Befehlsübersicht:] {Übersicht} Übersicht über verschiedene Shell-Befehle #tag: System, Shell