Articles

Bash Sleep Command: A Quick Guide to Use It in Your Scripts

zazwyczaj chcemy, aby skrypt działał szybko, ale nie zawsze tak jest. Czasami sensowne jest, aby nasz skrypt Bash używał polecenia sleep przed wykonaniem następnego polecenia. Dowiedzmy się kiedy…

Co to jest polecenie Bash sleep?

polecenie uśpienia Bash opóźnia wykonanie polecenia po nim na określoną ilość czasu. Czas snu wyrażany jest w sekundach. Użycie polecenia sleep jest powszechne podczas planowania zadania co X sekund lub gdy skrypt opiera się na innym skrypcie, aby zakończyć jego wykonanie.,

przyjrzyjmy się trzem scenariuszom, w których użyjesz polecenia sleep:

  1. zamiast natychmiastowego uruchomienia polecenia, chcesz zaplanować jego wykonanie X sekund w przyszłości.
  2. program zajmuje dużo czasu, aby przetworzyć zestaw plików, a po zakończeniu przetwarzania generuje plik, aby to zaznaczyć. Możesz napisać skrypt, który sprawdza, czy ten plik istnieje i śpi przez pewien czas, jeśli tak nie jest. w przeciwnym razie wykonuje następny krok procesu na podstawie plików wygenerowanych przez pierwszy program.,
  3. programowo wywołujesz API innych firm i wiesz, że API nie pozwala na więcej niż 60 żądań na minutę. Uśpienie przez X sekund pozwala upewnić się, że nie przekroczysz liczby żądań na minutę dozwolonej przez dostawcę API.

zaczynajmy!,

Podstawowa składnia polecenia Sleep Bash

podstawowa składnia polecenia sleep w Bash jest bardzo prosta:

sleep <SECONDS>

oto, co się stanie, jeśli uruchomisz je w wierszu poleceń:

$ sleep 5$ 

w tym przypadku po wykonaniu polecenia sleep 5 Linux zwraca powłokę z powrotem po 5 sekundach.

a teraz przejdźmy do trzech praktycznych przykładów, jak wykonać polecenie Bash sleep.,

scenariusz 1: polecenie Sleep, które opóźnia wykonanie innego polecenia w skrypcie Bash

napiszę prosty skrypt powłoki Bash, aby pokazać dokładne zachowanie polecenia sleep…

…biorąc pod uwagę, że poprzedni przykład nie mógł tak naprawdę pokazać, że polecenie sleep zwróciło powłokę po 5 sekundach.

napiszmy skrypt, który robi to, co wyjaśniłem w scenariuszu 1, opóźnia wykonanie polecenia O X sekund (w tym przypadku 5 sekund).

to prawie jak wykonywanie polecenia w określonym czasie, zgodnie z tą samą zasadą harmonogramu zadań.,

tak więc, utwórz bardzo prosty skrypt powłoki Bash o nazwiedelay_cmd.sh:

#!/bin/bash datesleep 5dateuptime 

polecenie date jest używane do drukowania bieżącej daty przed i po poleceniu sleep, w ten sposób możesz zobaczyć, że skrypt jest zawieszony na 5 sekund.

Po 5 sekundach wykonywana jest komenda uptime.

ma sens?

teoretycznie możemy napisać ten sam skrypt w jednej linii:

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

dzieje się tak dlatego, że średnik jest używany w Linuksie do oddzielania różnych poleceń i wykonywania ich kolejno.,

innymi słowy, Linux upewnia się, że każde polecenie zostanie zakończone przed wykonaniem następnego.

Scenariusz 2: skrypt Bash, który używa polecenia Sleep, aby czekać na zakończenie innego skryptu

w tym przykładzie utworzę dwa skrypty:

  1. program_1.sh: śpi przez 30 sekund, a następnie tworzy plik o nazwie stage1.kompletna. Zasadniczo symuluje to program, który zajmuje dużo czasu, aby wykonać określone zadanie i potwierdza zakończenie jego wykonania poprzez utworzenie stage1.kompletny plik.
  2. program_2.sh: używa pętli while I przy każdej iteracji sprawdza czy stage1.,kompletny plik istnieje. Jeśli nie śpi przez 6 sekund, jeśli plik istnieje, wypisuje komunikat ” File stage1.kompletny istnieje. Etap 1 zakończony, etap 2…”.

Oto program_1.sh:

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

polecenie touch jest używane przez pierwszy program do tworzenia stage1.Ukończ plik po 30 sekundach od momentu wykonania skryptu.

i program_2.sh poniżej, będziemy używać instrukcji Bash if else do jej implementacji:

w drugim skrypcie powłoki Bash mamy nieskończoną pętlę., Przy każdej iteracji skrypt:

  • sprawdza, czy plik stage1.kompletny jest obecny.
  • Jeśli plik nie istnieje, uśpi się przez 6 sekund
  • Jeśli plik istnieje, usuwa stage1.zakończyć plik i zatrzymuje wykonanie za pomocą polecenia Bash exit.,

przed wykonaniem tych dwóch skryptów upewnij się, że oba są wykonywalne za pomocą polecenia chmod +x:

chmod +x program_*.sh

więc uruchom Skrypty…

uruchomimy program_1.sh najpierw uruchomimy go w tle, abyśmy mogli uruchomić program_2.sh natychmiast po tym w tym samym terminalu:

zgodnie z oczekiwaniami drugi skrypt śpi przez 6 sekund, dopóki nie znajdzie pliku STAGE1.dokończ plik, a potem Wstrzymaj jego wykonanie.,

Scenariusz 3: polecenie Sleep do kontrolowania liczby wywołań do interfejsu API innych firm

Jeśli chcesz wywołać interfejs API za pomocą skryptu Bash, możesz użyć polecenia curl.

używanie curl do wywołania API jest proste, Weźmy na przykład następujący punkt końcowy API:

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

napiszemy skrypt Bash, który używa curl do wykonania żądania GET i używa polecenia sleep, aby ograniczyć liczbę wywołań API w określonym czasie.

ma to na celu uniknięcie przekroczenia potencjalnych limitów nałożonych przez dostawcę API.,

jest to skrypt, który napisałem:

kilka rzeczy o tym skrypcie:

  • zmienna COUNTER służy do zliczania liczby wywołań API, które mają być wykonane przed zakończeniem pętli while.
  • cURL jest używany do wykonywania żądań GET względem punktu końcowego API.
  • przy każdej iteracji pętli while zawieszamy skrypt na 10 sekund za pomocą polecenia sleep, aby ograniczyć liczbę wywołań API do jednego co 10 sekund.
  • zwiększamy zmienną COUNTER używając operatora arytmetycznego $ (()).,

tak więc wykonaj skrypt:

zgodnie z oczekiwaniami wykonywane są dwa wywołania API, a następnie wykonywanie pętli while zatrzymuje się, ponieważ wartość zmiennej COUNTER wynosi 3.

podsumowanie

pokazałem ci różne sposoby użycia polecenia sleep w skrypcie Bash.

i w tym procesie omówiłem wiele różnych rzeczy:

  • uruchamianie skryptów w tle.
  • używając operatora arytmetycznego.
  • nieskończone pętle while.
  • Licznik zmiennych.
  • wywołanie API za pomocą curl.
  • Tworzenie i usuwanie plików.,
  • Ustawianie uprawnień wykonywalnych dla skryptów Bash.
  • używając średnika do sekwencyjnego uruchamiania poleceń.

mam nadzieję, że to ma sens!

a Ty? Jak inaczej można użyć polecenia sleep W Bash? 🙂

powiązany darmowy kurs: rozszyfrowywanie skryptów Bash