Articles

Příkaz Bash Sleep: Rychlý průvodce jeho použitím ve skriptech

obvykle chceme, aby skript běžel rychle, ale není tomu tak vždy. Někdy má smysl, aby náš Bash skript použil příkaz sleep před provedením dalšího příkazu. Zjistíme, kdy…

jaký je příkaz Bash sleep?

příkaz Bash sleep zpožďuje provedení příkazu po něm po určitou dobu. Doba spánku je vyjádřena v sekundách. Použití příkazu sleep je běžné při plánování úkolu každých X sekund nebo když skript spoléhá na jiný skript k dokončení jeho provádění.,

podívejme se na tři scénáře, ve kterých byste použili příkaz sleep:

  1. namísto okamžitého spuštění příkazu chcete v budoucnu naplánovat jeho provedení x sekund.
  2. program trvá dlouho zpracovat sadu souborů a při zpracování je kompletní generuje soubor uvést. Můžete napsat skript, který zkontroluje, zda daný soubor existuje a spí po určitou dobu, pokud to nemá. V opačném případě se provede další krok v procesu, na základě souborů vytvořeného prvním programem.,
  3. programově voláte API třetí strany a víte, že API neumožňuje více než 60 požadavků za minutu. Sleeping for X seconds vám umožní ujistit se, že nepřekračujete počet požadavků za minutu povolených poskytovatelem API.

začněme!,

Základní Syntaxi Bashe Spánku

základní syntaxe spát příkaz v Bashi je velmi jednoduché:

sleep <SECONDS>

Tady je to, co se stane, pokud spustíte v příkazovém řádku:

$ sleep 5$ 

V tomto případě po provedení spát 5 příkaz Linux vrací zpět do shellu po 5 sekundách.

a nyní se podívejme na tři praktické příklady toho, jak vám příkaz Bash sleep.,

Scénář 1: Sleep Příkaz, že Zpoždění v Provádění Jiného Příkazu v Bashi Skript

jsem se napsat jednoduchý Bash skript, ukázat, přesné chování spánku…

…vzhledem k tomu, že předchozí příklad nemohl opravdu ukazují, že spánek příkaz se vrátil zpět do shellu po 5 sekundách.

napíšeme skript, který dělá to, co jsem vysvětlil ve scénáři 1, zpožďuje provedení příkazu O X sekund (v tomto případě 5 sekund).

je to skoro jako spuštění příkazu v určitém čase podle stejného principu plánovačů úloh.,

Takže, vytvořit velmi jednoduchý Bash skript s názvem delay_cmd.sh:

#!/bin/bash datesleep 5dateuptime 

datum příkaz se používá k tisku aktuálního data před a po spánku, tímto způsobem můžete vidět, že scénář je pozastavena po dobu 5 sekund.

po 5 sekundách je spuštěn příkaz uptime.

dává smysl?

V teorii, můžeme zapsat stejný skript v jednom řádku:

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

je To proto, že středník se používá v Linuxu oddělit různé příkazy a vykonávat je postupně.,

jinými slovy, Linux zajišťuje, aby každý příkaz byl dokončen před provedením dalšího.

Scénář 2: Bash Skript, který Používá Spánku Příkaz Čekat na Další Skript, Kompletní

V tomto příkladu budu vytvořit dva skripty:

  1. program_1.sh: nespí po dobu 30 sekund a pak se to vytvoří soubor s názvem stage1.kompletní. To v podstatě simuluje program, který trvá dlouhou dobu k dokončení určitého úkolu a potvrzuje dokončení jeho provedení vytvořením stage1.kompletní soubor.
  2. program_2.sh: používá chvíli smyčku a při každé iteraci kontroluje, zda je stage1.,kompletní soubor existuje. Pokud nespí po dobu 6 sekund, pokud soubor existuje, vytiskne zprávu “ soubor stage1.kompletní existuje. Fáze 1 kompletní, počáteční fáze 2…“.

zde je program_1.sh:

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

příkaz touch používá první program k vytvoření stage1.kompletní soubor po 30 sekundách od okamžiku spuštění skriptu.

A program_2.sh je následující, budeme používat Bash, pokud else realizovat:

V druhé Bash skript, máme nekonečné smyčce., Při každé iteraci skript:

  • zkontroluje, zda soubor stage1.kompletní je přítomen.
  • pokud soubor neexistuje, spí po dobu 6 sekund
  • pokud soubor existuje, odstraní stage1.kompletní soubor a zastaví provádění pomocí příkazu Bash exit.,

Před spuštěním dvou skriptů, ujistěte se, že jsou oba spustitelný pomocí chmod +x příkaz:

chmod +x program_*.sh

Takže, pojďme spustit skripty…

spustit program_1.sh první, budeme jej spustit v pozadí, takže můžeme spustit program_2.sh ihned po, že ve stejném terminálu:

Jak se očekávalo druhý skript udržuje spaní pro 6 sekund, dokud nenajde ten soubor s příponou stage1.kompletní soubor, a pak se zastaví jeho provedení.,

scénář 3: příkaz spánku pro ovládání počtu hovorů na API třetí strany

Pokud chcete volat API pomocí skriptu Bash, můžete použít příkaz curl.

Pomocí curl volat API je jednoduché, pojďme si vzít například následující rozhraní API koncový bod:

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

Budeme psát Bash skript, který používá curl provést GET požadavek proti ní a používá spánku příkaz omezit počet API volání v určitou dobu.

to se provádí, aby se zabránilo překročení případných limitů uložených poskytovatelem API.,

Toto je skript, napsal jsem:

jen Málo věcí, o tento skript:

  • proměnné COUNTER slouží k spočítat počet volání API mají být provedeny před ukončením z while.
  • cURL se používá k provádění požadavků GET proti koncovému bodu API.
  • při každé iteraci while loop pozastavíme skript na 10 sekund pomocí příkazu sleep, abychom omezili počet volání API na jeden každých 10 sekund.
  • zvyšujeme proměnnou čítače pomocí aritmetického operátora $ (()).,

spustit skript:

Jak se očekávalo, dvě API volání jsou provedeny a pak výkon, zatímco smyčka se zastaví, protože hodnota proměnné COUNTER je 3.

závěr

ukázal jsem vám různé způsoby použití příkazu sleep ve skriptu Bash.

a v tomto procesu jsem se zabýval mnoha různými věcmi:

  • spuštěním skriptů na pozadí.
  • pomocí aritmetického operátora.
  • Infinite while loops.
  • čítač proměnných.
  • volání API pomocí curl.
  • vytváření a odstraňování souborů.,
  • nastavení spustitelných oprávnění pro Bash skripty.
  • pomocí středníku spusťte příkazy postupně.

doufám, že to dává smysl!

a vy? Jak jinak byste použili příkaz spánku v Bash?

související Volný kurz: dešifrovat Bash skriptování