Articles

Bash Sleep Command: een korte handleiding om het te gebruiken in je Scripts

meestal willen we dat een script snel draait, maar dat is niet altijd het geval. Soms is het zinvol voor ons Bash script om het sleep commando te gebruiken voordat het volgende commando wordt uitgevoerd. Laten we uitzoeken wanneer …

Wat is het commando Bash sleep?

het commando Bash sleep vertraagt de uitvoering van het commando erna voor een bepaalde tijd. De slaaptijd wordt uitgedrukt in seconden. Het gebruik van het sleep commando is gebruikelijk bij het plannen van een taak elke X seconden of wanneer een script vertrouwt op een ander script om de uitvoering te voltooien.,

laten we eens kijken naar drie scenario ‘ s waarin u het sleep commando zou gebruiken:

  1. in plaats van een commando onmiddellijk uit te voeren, wilt u de uitvoering ervan X seconden in de toekomst plannen.
  2. Een programma duurt lang om een set bestanden te verwerken en wanneer de verwerking voltooid is, genereert het een bestand om dat aan te geven. U kunt een script schrijven dat controleert of dat bestand bestaat en voor een bepaalde periode slaapt als het niet bestaat. anders voert u de volgende stap van het proces uit op basis van de bestanden die door het eerste programma zijn gegenereerd.,
  3. u roept een API van derden programmatisch aan en u weet dat de API niet meer dan 60 verzoeken per minuut toestaat. Slapen voor X seconden kunt u ervoor zorgen dat u niet gaan over het aantal verzoeken per minuut toegestaan door de API-provider.

laten we beginnen!,

basissyntaxis van het Slaapcommando van Bash

de basissyntaxis van het slaapcommando in Bash is zeer eenvoudig:

sleep <SECONDS>

Dit is wat er gebeurt als je het op de commandoregel uitvoert:

$ sleep 5$ 

in dit geval geeft Linux na het uitvoeren van het slaapcommando de shell na 5 seconden terug.

en nu gaan we naar drie praktische voorbeelden van hoe je het Bash sleep Commando kunt gebruiken.,

Scenario 1: Slaapcommando dat de uitvoering van een ander commando in een Bash-Script vertraagt

Ik zal een eenvoudig Bash-shell-script schrijven om het exacte gedrag van het slaapcommando weer te geven…

…aangezien het vorige voorbeeld niet echt kon aantonen dat het slaapcommando de shell na 5 seconden terugkeerde.

laten we een script schrijven dat doet wat ik heb uitgelegd in Scenario 1, Het vertraagt de uitvoering van een commando met X seconden (in dit geval 5 seconden).

het is bijna als het uitvoeren van een commando op een specifiek moment volgens hetzelfde principe van taakplanners.,

Maak een heel eenvoudig Bash shell script genaamd delay_cmd.sh:

#!/bin/bash datesleep 5dateuptime 

Het date commando wordt gebruikt om de huidige datum voor en na het sleep Commando af te drukken, op deze manier kunt u zien dat het script 5 seconden onderbroken is.

na 5 seconden wordt het uptime commando uitgevoerd.

zinvol?

in theorie kunnen we hetzelfde script op één regel schrijven:

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

Dit komt omdat de puntkomma in Linux wordt gebruikt om verschillende commando ‘ s te scheiden en ze achtereenvolgens uit te voeren.,

met andere woorden, Linux zorgt ervoor dat elk commando voltooid is voordat het volgende commando wordt uitgevoerd.

Scenario 2: Bash Script dat het Sleep Commando gebruikt om te wachten tot een ander Script voltooid is

In dit voorbeeld zal ik twee scripts aanmaken:

  1. program_1.sh: slaapt voor 30 seconden en dan maakt het een bestand genaamd stage1.volledige. Dit simuleert in principe een programma dat lang duurt om een specifieke taak te voltooien en bevestigt de voltooiing van de uitvoering ervan door het creëren van de stage1.compleet dossier.
  2. program_2.sh: gebruikt een while loop en controleert bij elke iteratie of de stage1.,het volledige bestand bestaat. Als het niet slaapt voor 6 seconden, als het bestand bestaat het drukt het bericht “File stage1.compleet bestaat. Fase 1 voltooid, startfase 2…”.

Hier is program_1.sh:

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

het touch commando wordt gebruikt door het eerste programma om stage1 aan te maken.voltooi het bestand na 30 seconden vanaf het moment dat het script wordt uitgevoerd.

en program_2.sh is het volgende, We zullen een Bash gebruiken als anders statement om het te implementeren:

In het tweede Bash shell script hebben we een oneindige lus., Bij elke iteratie controleert het script:

  • of het bestand stage1.compleet is aanwezig.
  • als het bestand niet bestaat, slaapt het 6 seconden
  • als het bestand bestaat, verwijdert het stage1.volledige bestand en stopt de uitvoering met behulp van de Bash exit Commando.,

voordat de twee scripts worden uitgevoerd, zorg ervoor dat ze beide uitvoerbaar zijn met behulp van het chmod +x Commando:

chmod +x program_*.sh

dus, laten we de scripts uitvoeren…

we zullen program_1.sh eerst draaien we het op de achtergrond zodat we onmiddellijk daarna in dezelfde terminal:

zoals verwacht blijft het tweede script 6 seconden slapen totdat het het bestand stage1 vindt.compleet bestand, en dan stopt het de uitvoering.,

Scenario 3: Sleep commando om het aantal aanroepen naar een API van derden te beheren

Als u een API wilt aanroepen met een Bash script kunt u het curl commando gebruiken.

curl gebruiken om een API aan te roepen is eenvoudig, laten we bijvoorbeeld het volgende API-eindpunt nemen:

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

We zullen een Bash-script schrijven dat curl gebruikt om een GET-verzoek tegen het uit te voeren en het sleep-commando gebruikt om het aantal API-aanroepen in een bepaalde periode te beperken.

Dit wordt gedaan om te voorkomen dat eventuele limieten die door de API-provider worden opgelegd, worden overschreden.,

Dit is het script dat ik geschreven heb:

weinig dingen over dit script:

  • De teller variabele wordt gebruikt om het aantal API-aanroepen te tellen dat moet worden uitgevoerd voordat de while-lus wordt afgesloten.
  • cURL wordt gebruikt om de GET-aanvragen uit te voeren tegen het API-eindpunt.
  • bij elke iteratie van de while loop onderbreken we het script voor 10 seconden met het sleep commando om het aantal API aanroepen te beperken tot één elke 10 Seconden.
  • we verhogen de teller variabele met behulp van de rekenkundige operator $(( )).,

dus, voer het script uit:

zoals verwacht worden twee API-aanroepen uitgevoerd en dan stopt de uitvoering van de while loop omdat de waarde van de variabele teller 3 is.

conclusie

Ik heb u verschillende manieren getoond om het sleep commando in een Bash script te gebruiken.

en tijdens het proces heb ik veel verschillende dingen behandeld:

  • het draaien van scripts op de achtergrond.
  • met behulp van de rekenkundige operator.
  • oneindige while lussen.
  • teller variabelen.
  • een API aanroepen met behulp van curl.
  • bestanden aanmaken en verwijderen.,
  • uitvoerbare rechten instellen voor Bash-scripts.
  • de puntkomma gebruiken om opdrachten achtereenvolgens uit te voeren.

Ik hoop dat het allemaal zinvol is!

en u? Hoe zou je anders het slaap commando in Bash gebruiken? 🙂

gerelateerde vrije cursus: ontcijferen bash Scripting