at
ist ein Befehlszeilendienstprogramm, mit dem Sie die Ausführung von Befehlen zu einem bestimmten Zeitpunkt planen können. Jobs erstellt mit at
werden nur einmal ausgeführt.
In diesem Artikel erklären wir, wie man at
verwendet und die dazugehörigen Dienstprogramme batch
, atq
, atrm
zum Anzeigen, Löschen und Erstellen von Jobs, die zu einem späteren Zeitpunkt ausgeführt werden sollen.
Installation von at
#
Je nach Distribution at
kann auf Ihrem Linux-System vorhanden sein oder nicht.
Wenn at
nicht installiert ist, können Sie es einfach mit dem Paketmanager Ihrer Distribution installieren.
-
Installieren Sie
at
auf Ubuntu und Debiansudo apt update
sudo apt install at
-
Installieren Sie
at
auf CentOS und Fedorasudo yum install at
Stellen Sie nach der Installation des Programms sicher, dass atd
, der Scheduling-Daemon läuft und ist so eingestellt, dass er beim Booten startet:
sudo systemctl enable --now atd
Verwendung des at
Befehl #
Die vereinfachte Syntax für at
Befehl lautet wie folgt:
at [OPTION...] runtime
Der at
Befehl übernimmt das Datum und die Uhrzeit (runtime
), wenn Sie den Job als Befehlszeilenparameter ausführen möchten, und den auszuführenden Befehl von der Standardeingabe.
Lassen Sie uns einen Job erstellen, der um 9:00 Uhr ausgeführt wird:
at 09:00
Sobald Sie Enter
gedrückt haben , wird Ihnen der at
angezeigt Eingabeaufforderung, die meistens mit at>
beginnt . Sie sehen auch eine Warnung, die Ihnen mitteilt, in welcher Shell der Befehl ausgeführt wird:
warning: commands will be executed using /bin/sh
at>
Geben Sie einen oder mehrere auszuführende Befehle ein:
tar -xf /home/linuxize/file.tar.gz
Wenn Sie mit der Eingabe der Befehle fertig sind, drücken Sie Ctrl-D
um die Eingabeaufforderung zu verlassen und den Job zu speichern:
at> <EOT>
job 4 at Tue May 5 09:00:00 2020
Der Befehl zeigt die Jobnummer sowie Ausführungszeit und -datum an.
Neben der Eingabe des Befehls in at
gibt es auch andere Möglichkeiten, den auszuführenden Befehl zu übergeben prompt. Eine Möglichkeit ist die Verwendung von echo
und leiten Sie den Befehl an at
weiter :
echo "command_to_be_run" | at 09:00
Eine weitere Option ist die Verwendung von Here document:
at 09:00 <<END
command_to_be_run
END
Um die Befehle aus einer Datei statt aus der Standardeingabe zu lesen, rufen Sie den Befehl mit -f
auf Option gefolgt vom Pfad zur Datei. Zum Beispiel, um einen Job zu erstellen, der das Skript /home/linuxize/script.sh
ausführt :
at 09:00 -f /home/linuxize/script.sh
Wenn der Befehl eine Ausgabe erzeugt, ist standardmäßig at
sendet eine E-Mail mit der Ausgabe an den Benutzer, sobald der Auftrag abgeschlossen ist. Rufen Sie at
auf mit dem -M
Option zum Unterdrücken der E-Mail-Benachrichtigung:
at 09:00 -M
Verwenden Sie das -m
um eine E-Mail zu senden, auch wenn es keine Ausgabe gibt:
at 09:00 -m
batch
Befehl #
batch
oder sein Alias at -b
plant Jobs und führt sie in einer Stapelwarteschlange aus, wenn die Systemlast dies zulässt. Standardmäßig werden die Jobs ausgeführt, wenn die durchschnittliche Systemlast unter 1,5 liegt. Der Wert der Last kann beim Aufruf von atd
angegeben werden Dämon. Wenn die durchschnittliche Systemlast höher ist als angegeben, warten die Jobs in der Warteschlange.
So erstellen Sie einen Job mit batch
, übergeben Sie die auszuführenden Befehle:
echo "command_to_be_run" | batch
Angabe der Ausführungszeit #
Der at
Das Dienstprogramm akzeptiert eine Vielzahl von Zeitangaben. Sie können Zeit, Datum und Inkrement von der aktuellen Zeit angeben:
-
Zeit - Um eine Zeit anzugeben, verwenden Sie den
HH:MM
oderHHMM
form. Um ein 12-Stunden-Zeitformat anzugeben, verwenden Sieam
oderpm
nach der Zeit. Sie können auch Zeichenfolgen wienow
verwenden ,midnight
,noon
, oderteatime
(16:00). Wenn die angegebene Zeit verstrichen ist, wird der Job am nächsten Tag ausgeführt. -
Datum - Mit dem Befehl können Sie die Auftragsausführung an einem bestimmten Datum planen. Das Datum kann mit dem Monatsnamen gefolgt vom Tag und einem optionalen Jahr angegeben werden. Sie können Zeichenfolgen wie
today
verwenden ,tomorrow
, oder Wochentag. Das Datum kann auch mit demMMDD[CC]YY
angegeben werden ,MM/DD/[CC]YY
,DD.MM.[CC]YY
oder[CC]YY-MM-DD
Formate. -
Erhöhen -
at
akzeptiert auch Inkremente in dernow + count time-unit
Format, wobeicount
ist eine Zahl undtime-unit
kann einer der folgenden Strings sein:minutes
,hours
,days
, oderweeks
.
Zeit, Datum und Inkrement können kombiniert werden, hier einige Beispiele:
-
Planen Sie einen Job für den kommenden Sonntag um zehn Minuten später als die aktuelle Zeit:
at sunday +10 minutes
-
Planen Sie einen Job so, dass er in zwei Tagen um 13:00 Uhr ausgeführt wird:
at 1pm + 2 days
-
Planen Sie einen Job, der am 21. Oktober 2020 um 12:30 Uhr ausgeführt werden soll:
at 12:30 102120
-
Planen Sie einen Job so, dass er in einer Stunde von jetzt an ausgeführt wird:
at now +1 hours
Sie können auch eine Uhrzeit und ein Datum im [[CC]YY]MMDDhhmm[.ss]
angeben mit dem -t
Möglichkeit. Hier ist ein Beispiel:
at -t 202005111321.32
Angeben der Warteschlange Nr.
Standardmäßig werden die Jobs mit at
erstellt werden in der Warteschlange namens a
eingeplant und mit batch
erstellte Jobs sind im b
eingeplant Warteschlange.
Abfragen können einen Namen von a
haben bis z
und A
bis Z
. Warteschlangen mit niedrigeren Buchstaben laufen mit geringerer Nettigkeit, was bedeutet, dass sie Vorrang vor denen mit höheren Buchstaben haben.
Sie können die Warteschlange mit dem -q
angeben Möglichkeit. Zum Beispiel, um einen Job im L
einzustellen Warteschlange, würden Sie Folgendes ausführen:
at monday +2 hours -q L
Ausstehende Jobs auflisten #
Um die ausstehenden Jobs des Benutzers aufzulisten, führen Sie atq
aus oder at -l
Befehl:
atq
Die Ausgabe listet alle Jobs auf, einen pro Zeile. Jede Zeile enthält die Auftragsnummer, das Datum, die Uhrzeit, den Buchstaben der Warteschlange und den Benutzernamen.
9 Tue May 5 12:22:00 2020 a linuxize
12 Wed Oct 21 12:30:00 2020 a linuxize
15 Tue May 5 09:00:00 2020 a linuxize
6 Tue May 5 09:00:00 2020 a linuxize
13 Mon May 4 23:08:00 2020 a linuxize
11 Wed Jul 1 10:00:00 2020 a linuxize
4 Tue May 5 09:00:00 2020 a linuxize
Wenn atq
als Administrator aufgerufen wird, listet es die ausstehenden Jobs aller Benutzer auf.
Ausstehende Jobs entfernen #
Um einen ausstehenden Job zu entfernen, rufen Sie atrm
auf oder at -r
Befehl gefolgt von der Auftragsnummer. Um beispielsweise den Job mit der Nummer neun zu entfernen, würden Sie Folgendes ausführen:
atrm 9
Benutzer einschränken #
Der /etc/at.deny
und /etc/at.allow
Mit Dateien können Sie steuern, welche Benutzer Jobs mit at
erstellen können oder batch
Befehl. Die Dateien bestehen aus einer Liste von Benutzernamen, ein Benutzername pro Zeile.
Standardmäßig nur die /etc/at.deny
Datei existiert und ist leer, was bedeutet, dass alle Benutzer den at
verwenden können Befehl. Wenn Sie einem bestimmten Benutzer die Berechtigung verweigern möchten, fügen Sie den Benutzernamen zu dieser Datei hinzu.
Wenn die /etc/at.allow
Datei existiert, nur die Benutzer, die in dieser Datei aufgeführt sind, können den at
verwenden Befehl.
Wenn keine der Dateien vorhanden ist, können nur Benutzer mit Administratorrechten at
verwenden Befehl.
Schlussfolgerung #
Der at
Dienstprogramm liest Befehle von der Standardeingabe und führt sie zu einem späteren Zeitpunkt aus. Im Gegensatz zu crontab werden Jobs mit at
erstellt werden nur einmal ausgeführt.
Weitere Informationen zu allen verfügbaren Optionen des at
Geben Sie den Befehl man at
ein in Ihrem Terminal.
Wenn Sie Fragen haben, können Sie gerne einen Kommentar hinterlassen.