Bash Sleep parancs: gyors útmutató a szkriptek használatához
általában azt akarjuk, hogy a szkript gyorsan futjon, de ez nem mindig így van. Néha van értelme, hogy a Bash szkriptünk az alvó parancsot használja a következő parancs végrehajtása előtt. Derítsük ki, mikor …
mi a Bash sleep parancs?
a Bash sleep parancs egy adott ideig késlelteti a parancs végrehajtását. Az alvási idő másodpercben fejeződik ki. Az alvó parancs használata gyakori, amikor egy feladatot x másodpercenként ütemez, vagy amikor egy szkript egy másik szkriptre támaszkodik a végrehajtás befejezéséhez.,
nézzük meg a három forgatókönyvet, amelyben az alvó parancsot használná:
- a parancs azonnali futtatása helyett a végrehajtást X másodpercre szeretné ütemezni a jövőben.
- EGY program hosszú időt vesz igénybe egy fájlkészlet feldolgozásához, majd amikor a feldolgozás befejeződött, létrehoz egy fájlt, amely ezt jelzi. Írhat egy szkriptet, amely ellenőrzi, hogy a fájl létezik-e és alszik-e egy bizonyos ideig, ha nem. ellenkező esetben végrehajtja a folyamat következő lépését az első program által generált fájlok alapján.,
- programozottan hív egy harmadik fél API-t, és tudja, hogy az API nem tesz lehetővé több mint 60 kérést percenként. Sleeping X másodperc lehetővé teszi, hogy megbizonyosodjon arról, hogy nem megy át a kérelmek száma percenként által engedélyezett API szolgáltató.
kezdjük!,
A bash Sleep parancs alapvető szintaxisa
az sleep parancs alapvető szintaxisa a Bash-ban nagyon egyszerű:
sleep <SECONDS>
itt történik, ha a parancssorban futtatja:
$ sleep 5$
ebben az esetben az sleep 5 parancs végrehajtása után a Linux 5 másodperc után visszaadja a héjat.
és most lépjünk át három gyakorlati példára, hogy hogyan kell neked a Bash sleep parancsot.,
1. forgatókönyv: Sleep parancs, amely késlelteti egy másik parancs végrehajtását egy bash szkriptben
írok egy egyszerű bash shell szkriptet, hogy megmutassam az sleep parancs pontos viselkedését …
… figyelembe véve, hogy az előző példa nem tudta igazán megmutatni, hogy az sleep parancs 5 másodperc után visszaküldte a héjat.
írjunk egy szkriptet, amely elvégzi azt, amit az 1. forgatókönyvben kifejtettem, késlelteti a parancs végrehajtását X másodperccel (ebben az esetben 5 másodperc).
Ez majdnem olyan, mint egy parancs végrehajtása egy adott időpontban, a job schedulers ugyanazon elve alapján.,
tehát hozzon létre egy nagyon egyszerű bash shell szkriptet, melynek neve delay_cmd.sh
:
#!/bin/bash datesleep 5dateuptime
a dátum parancs az aktuális dátum nyomtatására szolgál az alvó parancs előtt és után, így láthatja, hogy a szkript 5 másodpercre van felfüggesztve.
5 másodperc elteltével az uptime parancs végrehajtásra kerül.
van értelme?
elméletben ugyanazt a szkriptet írhatjuk egyetlen sorba:
#!/bin/bash date; sleep 5; date; uptime
Ez azért van, mert a pontosvesszőt Linuxban használják különböző parancsok elválasztására és egymás után történő végrehajtására.,
más szóval, a Linux gondoskodik arról, hogy minden parancs befejeződjön, mielőtt végrehajtja a következőt.
2. forgatókönyv: Bash szkript, amely az alvó parancsot használja, hogy várjon egy másik szkriptet a
befejezéséhez ebben a példában két szkriptet fogok létrehozni:
- program_1.sh: 30 másodpercig alszik, majd létrehoz egy stage1 nevű fájlt.teljes. Ez alapvetően szimulál egy programot, amely hosszú időt vesz igénybe egy adott feladat elvégzéséhez, és megerősíti a végrehajtás befejezését a stage1 létrehozásával.teljes fájl.
- program_2.sh: egy while ciklust használ, és minden iterációban ellenőrzi, hogy a stage1.,teljes fájl létezik. Ha nem alszik 6 másodpercig,ha a fájl létezik, kiírja a “fájl stage1.teljes létezik. 1. szakasz teljes, 2. Kezdő szakasz…”.
itt van program_1.sh:
#!/bin/bash sleep 30touch stage1.complete
a touch parancsot az első program használja a stage1 létrehozásához.töltse ki a fájlt a szkript végrehajtásától számított 30 másodperc után.
és program_2.sh a következő, mi lesz a Bash, ha mást nyilatkozatot annak végrehajtására:
a második Bash shell script van egy végtelen hurok., Minden iterációban a szkript:
- ellenőrzi, hogy a fájl stage1.Teljes van jelen.
- Ha a fájl nem létezik, akkor 6 másodpercig alszik
- ha a fájl létezik, eltávolítja a stage1-et.töltse ki a fájlt, majd állítsa le a végrehajtást a Bash exit paranccsal.,
a két szkript végrehajtása előtt ellenőrizze, hogy mindkettő végrehajtható-e a chmod +x paranccsal:
chmod +x program_*.sh
tehát futtassuk a szkripteket…
program_1.sh
először futtatjuk a háttérben, hogy futtathassuk a program_2.sh
közvetlenül ezt követően ugyanabban a terminálon:
ahogy az várható volt, a második szkript 6 másodpercig alszik, amíg meg nem találja a fájl Stage1.töltse ki a fájlt, majd leállítja a végrehajtást.,
3. forgatókönyv: Sleep parancs egy harmadik fél API-jának hívásainak számának vezérléséhez
ha API-t szeretne hívni egy bash szkript segítségével, használhatja a curl parancsot.
a curl használata az API hívásához egyszerű, vegyük például a következő API végpontot:
https://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=b6907d289e10d714a6e88b30761fae22
írunk egy bash szkriptet, amely a curl-t használja a GET kérés ellen, és az sleep paranccsal korlátozza az API hívások számát egy bizonyos idő alatt.
Ez azért van így, hogy elkerüljük az API-szolgáltató által előírt esetleges határértékek túllépését.,
Ez a szkript, amit írtam:
néhány dolog erről a szkriptről:
- a számláló változó a végrehajtandó API-hívások számának kiszámítására szolgál, mielőtt kilépne a while hurokból.
- a cURL az API végpontjával szembeni kérések lekérésére szolgál.
- a while hurok minden iterációjánál 10 másodpercig felfüggesztjük a szkriptet az sleep paranccsal, hogy az API-hívások számát 10 másodpercenként korlátozzuk.
- a számláló változót a $ ((()) számtani operátor segítségével növeljük.,
tehát hajtsa végre a szkriptet:
a várt módon két API-hívás kerül végrehajtásra, majd a while hurok végrehajtása leáll, mert a változó számláló értéke 3.
következtetés
megmutattam neked az alvás parancs különböző módjait egy Bash szkriptben.
a folyamat során sok különböző dolgot fedtem le:
- szkriptek futtatása a háttérben.
- az aritmetikai operátor használatával.
- végtelen hurkok közben.
- számláló változók.
- API hívása a curl használatával.
- fájlok létrehozása és eltávolítása.,
- a Bash szkriptek futtatható engedélyeinek beállítása.
- a pontosvessző használatával parancsokat futtathat egymás után.
remélem, hogy minden értelme!
és te? Máskülönben hogyan használnád a sleep parancsot Bash-ben? Related
kapcsolódó ingyenes tanfolyam: megfejteni Bash Scripting