ubuntuusers.de

zeitgesteuerte Befehlsausführung

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 Die folgenden Skripte erlauben es, zum Ende eines bestimmten Zeitintervalls oder zu einer bestimmten Uhrzeit einen Befehl im Terminal ausführen zu lassen – solange der Benutzer, von dem das Skript ausgeführt wird, angemeldet ist.

Als Anwendungsbeispiel wird das Abspielen von Multimediadateien mittels VLC, MPlayer oder Totem aufgeführt. Man kopiert die Bash-Skripte mit einem Editor[2] in eine Datei, speichert sie danach und macht sie ausführbar[3].

Grafische Alternativen bieten folgende Programme:

Ausführung nach Ablauf einer Zeitspanne

Es müssen die Stunden, Minuten und Sekunden nach deren Ablauf der Befehl ausgeführt werden soll, angegeben werden.

Skript

1
2
3
#!/bin/bash
sleep $((3600*$1 + 60*$2 + $3))
# Hier den auszuführenden Befehl einfügen

Benutzung

Grundsätzlich muss das Programm so im Terminal[1] aufgerufen werden:

./skriptname.sh <Stunden> <Minuten> <Sekunden> 

skriptname.sh steht für den gewählten Dateinamen. Das Ausführen via Nautilus funktioniert nicht, da die Zeitparameter angegeben werden müssen.

  • Für <Stunden> setzt man die Anzahl der Stunden ein.

  • Für <Minuten> setzt man die Anzahl der Minuten ein.

  • Für <Sekunden> setzt man die Anzahl der Sekunden ein.

Anwendungsbeispiel mit VLC

Als Befehl wird folgendes in Zeile 3 eingefügt:

vlc -f -R --no-osd $4 

Wer nicht möchte, dass das Video wiederholt wird, entfernt einfach den Parameter -R. Wer keinen Vollbild-Modus möchte oder Musik hört, kann den Parameter -f entfernen.

Zum Aufrufen des Skriptes muss dann noch der Pfad zur Mediendatei, beziehungsweise die URL hinzugefügt werden:

./skriptname.sh <Stunden> <Minuten> <Sekunden> <Pfad/URL> 

Ausführung zu einer Uhrzeit

Diese Variante erlaubt es, eine Uhrzeit im Format hhmm einzugeben zu der der Befehl ausgeführt werden soll.

Skript

Dieses Skript ist auch aus dem Dateimanager mittels der Option Im Terminal ausführen ausführbar. Es arbeitet mit Eingabe der Uhrzeit durch den Benutzer direkt im Terminal.

1
2
3
4
5
6
7
#!/bin/bash
echo "Wann soll der Befehl ausgeführt werden? (hhmm)"
read u
while [ $(date +%H%M) -ne $u ]; do
    sleep 55
done
# Hier den auszuführenden Befehl einfügen

Da dieses Skript, um CPU-Last zu sparen, nur alle 55 Sekunden die Uhrzeit überprüft, wird der Befehl nicht genau um hh:mm:00 ausgeführt, sondern bis zu 55 Sekunden später.

Anwendungsbeispiel mit MPlayer

Hier wird zusätzlich der Pfad zur Datei abgefragt.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/bin/bash
echo "Wann soll geweckt werden? (hhmm)"
read u

echo "Welche Datei? (Pfad zur Mediendatei kopieren und einfügen)"
read p

while [ $(date +%H%M) -ne $u ]; do
    sleep 55
done

mplayer $p

Flexible und genaue Ausführung nach Zeitspanne oder Uhrzeit

Das nachfolgende Skript eignet sich, um einen Befehl flexibel entweder zu einer bestimmten Uhrzeit oder nach einer Zeitspanne auszuführen. Dabei wird der Befehl date verwendet, um die eingegebene Zeit um zurechnen und als Befehl wird Totem gestartet. Die Zeit kann theoretisch bis auf die Nanosekunde genau festgelegt werden.

Man führt das Skript so aus:

./wecker.sh <Zeitspanne|Uhrzeit> <Datei> 

  • wecker.sh muss durch den Namen des Skripts ausgetauscht werden.

  • <Zeitspanne|Uhrzeit> kann durch die Zeitspanne oder Uhrzeit, zu bzw. nach der man geweckt werden möchte, ersetzt werden. Mögliche Eingaben sind: HH:MM, HH:MM:SS, "YYYY-MM-DD HH:MM", "tomorrow 11:00", 100sec, 30min, 20hours, "1hours 15min", ...

  • <Datei> kann durch den Dateinamen der Multimediadatei ersetzt werden.

Die Parameterangaben sind optional. Sie können auch im Programm selber angegeben werden. Enthalten die Parameter Leerzeichen, dann müssen sie in Anführungszeichen eingeschlossen werden. Es kann keine Datei ohne Zeitspanne eingegeben werden.

Skript

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/bash
if [ "$1" ]
then
    zeit="$1"
else
    echo "Wann soll der Wecker klingeln?"
    read zeit
fi

if [ -f "$2" ]
then
    dateiname="$2"
else
    echo "Welche Datei soll abgespielt werden?"
    read dateiname
fi

jetzt=$(date +%s) # Zeit jetzt, in Sekunden seit 1970
spaeter=$(date -d "$zeit" +%s) # Zeit für die Ausführung des Befehls, in Sekunden seit 1970
spaeterlesbar=$(date -d "$zeit" +%Y-%m-%d-%H:%M:%S) # menschenlesbare Zeit für die Ausführung des Befehls
sleepsekunden=$(($spaeter - $jetzt)) # Zeit in Sekunden für sleep
echo "in $(($sleepsekunden / 60)) minuten um $spaeterlesbar wird der Befehl ausgeführt." # kleine Ausgabe um zu sehen, ob man alles richtig eingegeben hat
sleep $sleepsekunden

totem $dateiname # auszuführender Befehl

  • at - zeitgesteuerte Ausführung von Kommandozeilenprogrammen

  • Skripte Übersichtsartikel

Diese Revision wurde am 16. Dezember 2015 10:08 von aasche erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Programmierung, Shell