Einführung
Wenn der Benutzer unter Linux eine Mehrfachbefehlssequenz ausgibt, werden die Befehle unmittelbar nacheinander oder gleichzeitig ausgeführt (z. B. der tee-Befehl). Manchmal ist es jedoch erforderlich, die Ausführung von Befehlen zu verschieben und dem System genügend Zeit zu geben, die erwarteten Ergebnisse zu erzielen.
In diesem Tutorial lernen Sie, wie Sie den Linux-sleep
verwenden Befehl, um die Befehlsausführung in den Terminal- und Shell-Skripten zu verzögern.
Voraussetzungen
- Ein System, auf dem Linux ausgeführt wird
- Zugriff auf die Befehlszeile
Was macht der Linux-sleep-Befehl?
Der sleep
Befehl setzt den Aufrufprozess des nächsten Befehls für eine bestimmte Zeit aus. Diese Eigenschaft ist nützlich, wenn die Ausführung des folgenden Befehls vom erfolgreichen Abschluss eines vorherigen Befehls abhängt.
Linux sleep Befehlssyntax erklärt
Die Syntax von sleep
Befehl ist einfach:
sleep [number]
Im obigen Beispiel nach sleep 5
ausgeführt wurde, erschien die zweite Eingabeaufforderung mit einer Verzögerung von 5 Sekunden.
Standardmäßig liest das System die Nummer nach sleep
als Anzahl von Sekunden. Um andere Zeiteinheiten anzugeben, verwenden Sie die folgende Syntax:
sleep [number][unit]
Der sleep
Der Befehl akzeptiert Fließkommazahlen. Es erlaubt mehrere Werte, die alle zusammengezählt werden, um die Dauer von sleep
zu berechnen .
Verfügbare Einheiten sind:
s
– Sekundenm
– Minutenh
– Stundend
– Tage
Um den sleep
zu beenden Drücken Sie nach dem Start und vor Ablauf der angegebenen Wartezeit Ctrl + C
.
Um die Hilfe für sleep
anzuzeigen Geben Sie Folgendes ein:
sleep --help
Geben Sie für Versionsdetails Folgendes ein:
sleep --version
Linux-Schlafbefehlsbeispiele
Die folgenden Abschnitte enthalten Beispiele für die Verwendung von sleep
Befehl in den Terminal- oder Shell-Skripten.
Alarm einrichten
Verwenden Sie sleep
um dem System zu sagen, dass es nach einer bestimmten Zeit eine MP3-Datei abspielen soll. Das Beispiel verwendet mplayer:
sleep 7h 30m && mplayer alarm.mp3
Befehle im Terminal verzögern
sleep
ist nützlich, um eine Zeit zwischen der Ausführung zweier Befehle zu erzwingen. Das folgende Beispiel erzeugt echo
Befehle werden im Sekundentakt ausgeführt:
sleep 1 && echo "one" && sleep 1 && echo "two"
Weise dem Schlafbefehl eine Variable zu
Es ist möglich, dem sleep
eine Variable zuzuweisen Befehl. Betrachten Sie das folgende Shell-Skript:
#!/bin/bash
SLEEP_INTERVAL="30"
CURRENT_TIME=$(date +"%T")
echo "Time before sleep: ${CURRENT_TIME}"
echo "Sleeping for ${SLEEP_INTERVAL} seconds"
sleep ${SLEEP_INTERVAL}
CURRENT_TIME=$(date +"%T")
echo "Time after sleep: ${CURRENT_TIME}"
Das Skript definiert eine Variable namens SLEEP_INTERVAL
dessen Wert später als Argument für sleep
verwendet wird Befehl. Die Ausgabe dieses Beispielskripts zeigt, dass die Ausführung 30 Sekunden gedauert hat:
Prüfintervalle definieren
Das folgende Beispiel veranschaulicht die Verwendung von sleep
Befehl in einem Skript, das prüft, ob eine Website online ist. Das Skript stoppt, wenn es eine Website erfolgreich anpingt, und sleep
führt eine Verzögerung von 10 Sekunden zwischen erfolglosen Pings ein.
#!/bin/bash
while :
do
if ping -c 1 www.google.com &> /dev/null
then
echo "Google is online"
break
fi
sleep 10
done
Geben Sie Zeit für den Abschluss des Vorgangs ein
Möglicherweise führen Sie ein Bash-Skript aus, das intern zwei weitere Bash-Skripts aufruft – eines, das Tests im Hintergrund ausführt, und ein anderes, das die Ergebnisse ausgibt. Verwenden Sie sleep
um zu verhindern, dass das zweite Skript falsche Ergebnisse ausgibt, wenn es vor Abschluss des ersten Skripts ausgeführt wird:
while kill -0 $BACK_PID ; do
echo "Waiting for the process to end"
sleep 1
done
Der kill -0 $BACK_PID
überprüft, ob der Prozess des ersten Skripts noch läuft. Wenn dies der Fall ist, druckt es die Nachricht und schläft 1 Sekunde lang, bevor es erneut überprüft wird.
Latenz vorhersagen
Verwenden Sie sleep
um die Latenz bestimmter Befehlsausführungen zu ermöglichen. Das folgende Skript-Snippet zeigt, wie sleep
gibt der CPU genug Zeit, um die Berechnung vor der nächsten Iteration durchzuführen.
for (( i = 1 ; i <= 250 ; i++ ));
do
sleep 1
qsub computation"${i}".pbs
done