Articles

Bash Sleep-Befehl: Eine Kurzanleitung zur Verwendung in Ihren Skripten

Normalerweise soll ein Skript schnell ausgeführt werden, aber das ist nicht immer der Fall. Manchmal ist es für unser Bash-Skript sinnvoll, den sleep-Befehl zu verwenden, bevor der nächste Befehl ausgeführt wird. Lassen Sie uns herausfinden, wann …

Was ist der Befehl Bash sleep?

Der Bash sleep-Befehl verzögert die Ausführung des Befehls danach für eine bestimmte Zeit. Die Schlafzeit wird in Sekunden ausgedrückt. Die Verwendung des Befehls sleep ist üblich, wenn eine Aufgabe alle X Sekunden geplant wird oder wenn ein Skript auf ein anderes Skript angewiesen ist, um die Ausführung abzuschließen.,

Schauen wir uns drei Szenarien an, in denen Sie den Befehl sleep verwenden würden:

  1. Anstatt einen Befehl sofort auszuführen, möchten Sie seine Ausführung in Zukunft X Sekunden planen.
  2. Ein Programm benötigt lange Zeit, um eine Reihe von Dateien zu verarbeiten, und wenn die Verarbeitung abgeschlossen ist, wird eine Datei generiert, um dies anzuzeigen. Sie können ein Skript schreiben, das prüft, ob diese Datei existiert und für einen bestimmten Zeitraum schläft, falls dies nicht der Fall ist. Andernfalls wird der nächste Schritt des Prozesses basierend auf den Dateien ausgeführt, die vom ersten Programm generiert wurden.,
  3. Sie rufen eine Drittanbieter-API programmgesteuert auf und wissen, dass die API nicht mehr als 60 Anforderungen pro Minute zulässt. Wenn Sie X Sekunden lang schlafen, können Sie sicherstellen, dass Sie die vom API-Anbieter zulässige Anzahl von Anforderungen pro Minute nicht überschreiten.

Los geht ‚ s!,

Grundlegende Syntax des Bash-Sleep-Befehls

Die grundlegende Syntax des sleep-Befehls in Bash ist sehr einfach:

sleep <SECONDS>

Folgendes passiert, wenn Sie es in der Befehlszeile ausführen:

$ sleep 5$ 

In diesem Fall gibt Linux die Shell nach 5 Sekunden zurück.

Und nun kommen wir zu drei praktischen Beispielen, wie Sie den Befehl Bash sleep ausführen.,

Szenario 1: Sleep-Befehl, der die Ausführung eines anderen Befehls in einem Bash-Skript verzögert

Ich schreibe ein einfaches Bash-Shell-Skript, um das genaue Verhalten des Sleep-Befehls anzuzeigen…

…wenn man bedenkt, dass das vorherige Beispiel nicht wirklich zeigen konnte, dass der sleep-Befehl die Shell nach 5 Sekunden zurückgegeben hat.

Schreiben wir ein Skript, das das tut, was ich in Szenario 1 erklärt habe, es verzögert die Ausführung eines Befehls um X Sekunden (in diesem Fall 5 Sekunden).

Es ist fast so, als würde man einen Befehl zu einem bestimmten Zeitpunkt nach dem gleichen Prinzip von Jobplanern ausführen.,

Erstellen Sie also ein sehr einfaches Bash-Shell-Skript mit dem Namen delay_cmd.sh:

#!/bin/bash datesleep 5dateuptime 

Der Befehl date wird verwendet, um das aktuelle Datum vor und nach dem Sleep-Befehl zu drucken.

Nach 5 Sekunden wird der uptime Befehl ausgeführt.

Macht das Sinn?

Theoretisch können wir dasselbe Skript in einer einzigen Zeile schreiben:

#!/bin/bash date; sleep 5; date; uptime 

Dies liegt daran, dass das Semikolon in Linux verwendet wird, um verschiedene Befehle zu trennen und sie nacheinander auszuführen.,

Mit anderen Worten, Linux stellt sicher, dass jeder Befehl abgeschlossen ist, bevor der nächste ausgeführt wird.

Szenario 2: Bash-Skript, das mit dem Befehl Sleep wartet, bis ein anderes Skript abgeschlossen ist

In diesem Beispiel erstelle ich zwei Skripte:

  1. program_1.sh: schläft 30 Sekunden und erstellt dann eine Datei namens stage1.komplett. Dies simuliert im Grunde ein Programm, das lange braucht, um eine bestimmte Aufgabe abzuschließen, und bestätigt den Abschluss seiner Ausführung durch Erstellen des stage1.vollständige Datei.
  2. program_2.sh: verwendet eine while-Schleife und prüft bei jeder Iteration, ob die stage1.,vollständige Datei existiert. Wenn dies nicht der Fall ist, schläft es 6 Sekunden lang, wenn die Datei vorhanden ist, wird die Meldung „Datei stage1.komplett existiert. Stufe 1 abgeschlossen, ab Stufe 2…“.

Hier ist program_1.sh:

#!/bin/bash sleep 30touch stage1.complete 

Der Touch-Befehl wird vom ersten Programm zum Erstellen der stage1 verwendet.vollständige Datei nach 30 Sekunden ab dem Moment, in dem das Skript ausgeführt wird.

Und program_2.sh ist das Folgende, werden wir eine Bash if else Anweisung verwenden, um es zu implementieren:

Im zweiten Bash Shell Skript haben wir eine Endlosschleife., Bei jeder Iteration überprüft das Skript:

  • , ob die Datei stage1.vollständig ist vorhanden.
  • Wenn die Datei nicht existiert, schläft sie 6 Sekunden lang
  • Wenn die Datei existiert, wird die stage1 entfernt.vollständige Datei und stoppt die Ausführung mit dem Befehl Bash exit.,

Bevor Sie die beiden Skripte ausführen, stellen Sie sicher, dass sie beide mit dem Befehl chmod +x ausführbar sind:

chmod +x program_*.sh

Lassen Sie uns die Skripte ausführen…

Wir werden program_1.sh Zuerst werden wir es im Hintergrund ausführen, damit wir program_2.sh unmittelbar danach im selben terminal:

Wie erwartet schläft das zweite Skript 6 Sekunden lang, bis es die Datei stage1 findet.komplette Datei, und dann stoppt es die Ausführung.,

Szenario 3: Sleep-Befehl zum Steuern der Anzahl der Aufrufe an eine Drittanbieter-API

Wenn Sie eine API mit einem Bash-Skript aufrufen möchten, können Sie den Befehl curl verwenden.

Die Verwendung von curl zum Aufrufen einer API ist einfach, nehmen wir zum Beispiel den folgenden API-Endpunkt:

https://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=b6907d289e10d714a6e88b30761fae22 

Wir schreiben ein Bash-Skript, das curl verwendet, um eine GET-Anforderung dagegen auszuführen, und den sleep-Befehl verwendet, um die Anzahl der API-Aufrufe in einem bestimmten Zeitraum zu begrenzen.

Dies geschieht, um zu vermeiden, dass vom API-Anbieter auferlegte potenzielle Grenzen überschritten werden.,

Dies ist das Skript, das ich geschrieben habe:

Einige Dinge zu diesem Skript:

  • Die Zählervariable wird verwendet, um die Anzahl der auszuführenden API-Aufrufe zu zählen vor dem Beenden aus der while-Schleife.
  • cURL wird verwendet, um die GET-Anforderungen für den API-Endpunkt auszuführen.
  • Bei jeder Iteration der while-Schleife unterbrechen wir das Skript 10 Sekunden lang mit dem Befehl sleep, um die Anzahl der API-Aufrufe alle 10 Sekunden auf einen zu begrenzen.
  • Wir erhöhen die Zählervariable mit dem arithmetischen Operator $(( )).,

Führen Sie also das Skript aus:

Wie erwartet werden zwei API-Aufrufe ausgeführt, und dann wird die Ausführung der while-Schleife gestoppt, da der Wert des Variablenzählers 3 ist.

Fazit

Ich habe Ihnen verschiedene Möglichkeiten gezeigt, den sleep-Befehl in einem Bash-Skript zu verwenden.

Und dabei habe ich viele verschiedene Dinge behandelt:

  • Skripte im Hintergrund ausführen.
  • Mit dem arithmetischen Operator.
  • Unendliche while-Schleifen.
  • Zählervariablen.
  • Aufruf einer API mit curl.
  • Erstellen und Entfernen von Dateien.,
  • Festlegen ausführbarer Berechtigungen für Bash-Skripte.
  • Verwenden Sie das Semikolon, um Befehle nacheinander auszuführen.

ich hoffe, es macht alles Sinn!

Und Sie? Wie sonst würden Sie den sleep-Befehl in Bash verwenden? 🙂

Verwandte KOSTENLOSEN Kurs: Entziffern Bash Scripting