Articles

Bash Sleep Command: En snabbguide för att använda den i dina skript

vi vill vanligtvis att ett skript ska köras snabbt, men det är inte alltid fallet. Ibland är det meningsfullt för vårt Bash-skript att använda sömnkommandot innan du kör nästa kommando. Låt oss ta reda på när…

vad är kommandot Bash sleep?

kommandot bash sleep fördröjer utförandet av kommandot efter det under en viss tid. Sömntiden uttrycks i sekunder. Användningen av kommandot sleep är vanligt när du schemalägger en uppgift varje X-sekund eller när ett script förlitar sig på ett annat script för att slutföra utförandet.,

låt oss titta på tre scenarier där du skulle använda kommandot sleep:

  1. istället för att köra ett kommando omedelbart vill du schemalägga dess körning X sekunder i framtiden.
  2. ett program tar lång tid att bearbeta en uppsättning filer och när bearbetningen är klar genererar den en fil för att indikera det. Du kan skriva ett skript som kontrollerar om den filen finns och sover under en viss tid om det inte gör det. annars kör nästa steg i processen baserat på de filer som genereras av det första programmet.,
  3. du anropar en tredje parts API programmatiskt och du vet att API inte tillåter mer än 60 förfrågningar per minut. Sova i X sekunder kan du se till att du inte går över antalet förfrågningar per minut som tillåts av API-leverantören.

låt oss komma igång!,

Grundläggande Syntax för Bash Sleep-kommandot

den grundläggande syntaxen för sleep-kommandot i Bash är väldigt enkel:

sleep <SECONDS>

här är vad som händer om du kör det i kommandoraden:

$ sleep 5$ 

i det här fallet efter att du har utfört sleep 5-kommandot Linux returnerar skalet tillbaka efter 5 sekunder.

och nu ska vi flytta till tre praktiska exempel på hur du Bash sleep-kommandot.,

Scenario 1: Sleep-kommando som fördröjer utförandet av ett annat kommando i ett Bash-skript

Jag kommer att skriva ett enkelt bash-skalskript för att visa det exakta beteendet för sleep-kommandot…

… med tanke på att det tidigare exemplet inte riktigt kunde visa att sleep-kommandot returnerade skalet tillbaka efter 5 sekunder.

låt oss skriva ett skript som gör vad jag har förklarat i Scenario 1, det fördröjer utförandet av ett kommando med X sekunder (i det här fallet 5 sekunder).

det är nästan som att köra ett kommando vid en viss tidpunkt enligt samma princip för arbetsschemaläggare.,

så, skapa ett mycket enkelt Bash-skalskript som heterdelay_cmd.sh:

#!/bin/bash datesleep 5dateuptime 

datumkommandot används för att skriva ut det aktuella datumet före och efter sömnkommandot, på så sätt kan du se att skriptet är avstängt i 5 sekunder.

Efter 5 sekunder körs upptidskommandot.

vettigt?

i teorin kan vi skriva samma skript i en enda rad:

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

detta beror på att semikolon används i Linux för att separera olika kommandon och utföra dem i följd.,

med andra ord ser Linux till att varje kommando slutförs innan nästa körs.

Scenario 2: Bash-skript som använder Sleep-kommandot för att vänta på att ett annat skript ska slutföras

i det här exemplet kommer jag att skapa två skript:

  1. program_1.sh: sover i 30 sekunder och sedan skapar en fil som heter stage1.slutföra. Detta simulerar i grunden ett program som tar lång tid att slutföra en specifik uppgift och bekräftar slutförandet av dess utförande genom att skapa stage1.fullständig fil.
  2. program_2.sh: använder ett tag slinga och vid varje iteration kontrollerar om stage1.,komplett fil finns. Om den inte sover i 6 sekunder, om filen finns det skriver meddelandet ” File stage1.komplett existerar. Steg 1 komplett, start steg 2…”.

Här är program_1.sh:

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

touch-kommandot används av det första programmet för att skapa stage1.komplett fil efter 30 sekunder från det ögonblick skriptet körs.

och program_2.sh är följande, Vi kommer att använda en Bash om annat uttalande för att genomföra det:

i den andra Bash shell script vi har en oändlig loop., Vid varje iteration manuset:

  • kontrollerar om filen stage1.komplett är närvarande.
  • Om filen inte finns sover den i 6 sekunder
  • Om filen finns tar den bort stage1.komplett fil och stoppar utförandet med kommandot Bash exit.,

innan du kör de två scripten, se till att de båda är körbara Med kommandot chmod +x:

chmod +x program_*.sh

så, låt oss köra scripten…

Vi kommer att köraprogram_1.sh först kör vi det i bakgrunden så att vi kan köraprogram_2.sh omedelbart efter det i samma terminal:

som förväntat fortsätter det andra skriptet att sova i 6 sekunder tills det hittar filstagen1.komplett fil, och sedan stoppar det exekvering.,

Scenario 3: Sleep kommando för att styra antalet samtal till en tredje part API

om du vill ringa ett API med ett Bash-skript kan du använda curl-kommandot.

att använda curl för att anropa ett API är enkelt, låt oss ta till exempel följande API-slutpunkt:

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

Vi kommer att skriva ett Bash-skript som använder curl för att utföra en GET-begäran mot den och använder sleep-kommandot för att begränsa antalet API-samtal under en viss tidsperiod.

detta görs för att undvika att gå över eventuella gränser som införts av API-leverantören.,

det här är skriptet jag har skrivit:

några saker om det här skriptet:

  • räknarvariabeln används för att räkna antalet API-samtal som ska utföras innan du lämnar från while loop.
  • cURL används för att utföra GET-begäranden mot API-slutpunkten.
  • vid varje iteration av while loop avbryter vi skriptet i 10 sekunder med sleep-kommandot för att begränsa antalet API-samtal till en var 10: e sekund.
  • vi ökar räknarvariabeln med hjälp av den aritmetiska operatören $(( )).,

så kör skriptet:

som förväntat körs två API-samtal och sedan avbryts utförandet av while loop eftersom värdet på variabelräknaren är 3.

slutsats

Jag har visat dig olika sätt att använda sleep-kommandot i ett Bash-skript.

och i processen har jag täckt många olika saker:

  • Kör skript i bakgrunden.
  • använda den aritmetiska operatören.
  • oändlig medan loopar.
  • Räknarevariabler.
  • anropa ett API med curl.
  • skapa och ta bort filer.,
  • ställa in körbara behörigheter för Bash-skript.
  • använda semikolon för att köra kommandon sekventiellt.

Jag hoppas att det är vettigt!

och du? Hur skulle du annars använda sömnkommandot i Bash? Related FREE Course: dechiffrera Bash Scripting