Inhalt

Commands Einmalig Ausfuehren

? Aufgabe

Um wiederkehrende Tasks auszuführen, eignet sich Crontab. Was aber, wenn ein Befehl lediglich einmalig zu einer festgelegten Zeit ausgeführt werden soll?

Beispielsweise der geplante Neustart eines Rechners um 05:00 Uhr morgens.

! Lösung

Für die einmalige Ausführung eines Befehls oder Skriptes eignet sich das Programm »at«.

Installation

Die Installation erfolgt über den apt Paketmanager:

1
apt install at

Im Anschluss muss der Daemon noch gestartet werden, damit At im Hintergrund läuft:

1
sudo systemctl enable --now atd

Verwendung

Die Syntax des Programms ist simpel:

1
at [option] runtime

Um einen Task zu planen, gibt man lediglich nachstehenden Befehl ein:

1
at now + 10 hours

Im Anschluss daran erscheint folgender Dialog:

1
2
warning: commands will be executed using /bin/sh
at>

Hinter »at>« wird der Befehl abgesetzt welcher in 10 Stunden ausgeführt werden soll.

Mit »Strg + D« wird der Vorgang gespeichert und der Dialog verlassen.

Hinweis: Werden für den geplanten Job Administrator Rechte benötigt, kann beim Erstellen wie gewohnt das »sudo« vorangestellt werden.

Einlesen von Befehlen aus Textdatei

1
at now + 10 hours < commands.txt

›At‹ unterstützt auch Einzeiler, diese Befehle müssen jedoch passend übergeben werden.

Auflisten bestehender Tasks

Um geplante Tasks aufzulisten genügt das Absetzen einer der folgenden Befehle:

1
2
3
4
5
[sudo] atq

# oder

[sudo] at -l

Job Details auslesen

Mittels »atq« werden alle Jobs gelistet, wenn die »job_number«, also die erste Zahl notiert wird, kann im Nachgang der geplante Job angeschaut werden:

1
2
3
4
5
# Jobs auflisten
atq

# Job Details auslesen
at -c job_number

Geplante Jobs Abbrechen/Entfernen/Löschen

Um einen geplanten Job zu entfernen, lassen wir uns zunächst alle Jobs ausgeben und entfernen im Anschluss den Job unter Angabe der »job_number«.

1
2
3
4
5
# Jobs auflisten
atq

# Job entfernen
atrm job_number

Um Alle geplanten Jobs zu entfernen kann dieses Code-Snippet benutzt werden:

1
for i in `atq | awk '{print $1}'`;do atrm $i;done

Beispiele

Anbei ein paar Beispiele zur Verwendung von »at«.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
now + 1 minute
now + 10 minutes
now + 1 hour
now + 10 days
now + 1 week
now + 1 months
now + 1 year
5 AM + 1 day
tomorrow # now + 24h
10:00 PM
15:00
10:00 AM tomorrow
10:00 next week
5:00 AM 01/01/2020
next week
next friday
tue (Tuesday)