Podczas pisania skryptów Bash na Linux istnieje wiele sytuacji, w których może być konieczne wprowadzenie przerwy lub opóźnienia w wykonaniu. Niezależnie od tego, czy ograniczasz żądania API, czekasz na zakończenie procesu, czy symulujesz operacje oparte na czasie, polecenie sleep jest twoim podstawowym narzędziem.

W tym artykule omówimy, jak skutecznie używać sleep w Bash, w tym przykłady z życia wzięte, jednostki czasu i wskazówki dotyczące zaawansowanego użycia.

Czym jest polecenie sleep?

Polecenie sleep wstrzymuje wykonanie skryptu lub polecenia na określony czas. Jest dostępne domyślnie na prawie wszystkich systemach podobnych do Unix, w tym Linux i macOS.

Podstawowa składnia:

sleep NUMBER[SUFFIX]
  • LICZBA: czas trwania

  • SUFFIX (opcjonalnie): jednostka czasu (s, m, h, d)

Jeśli nie określono sufiksu, przyjmuje się sekundy.

Praktyczne zastosowania w skryptach Bash

1. Wstrzymywanie między poleceniami

#!/bin/bash
echo "Starting process..."
sleep 3
echo "Process resumed after 3 seconds"

2. Opóźnianie wykonania w pętlach

#!/bin/bash
for i in {1..5}; do
echo "Ping $i"
sleep 1
done

3. Czekanie na uruchomienie usług

Jeśli uruchamiasz proces w tle, który potrzebuje czasu na inicjalizację:

#!/bin/bash
./start_server.sh &
sleep 10
curl http://localhost:8080/healthcheck

4. Ograniczanie tempa w skryptach

Podczas interakcji z API lub wykonywania powtarzalnych zadań, które wymagają ograniczenia:

#!/bin/bash
for url in $(cat urls.txt); do
curl -s "$url"
sleep 2 # Avoid overloading the server
done

Ostrzeżenie: Używaj sleep odpowiedzialnie

  • Nadmierne używanie sleep może prowadzić do nieefektywnych skryptów, szczególnie w środowiskach wymagających wysokiej wydajności.

  • Dla skryptów opartych na zdarzeniach rozważ inotifywait lub warunkowe logiki zamiast arbitralnych sleep.

  • W automatyzacji lub DevOps unikaj długich czasów sleep, chyba że jest to absolutnie konieczne — preferuj polling z logiką timeout.

Porady profesjonalne

  • Użyj sleep z & aby uruchomić go w tle:

    sleep 5 & # Continue execution immediately while sleeping in background
  • Połącz z wait, jeśli to konieczne:

    sleep 5 &
    wait
    echo "Waited for sleep to finish"
  • W zadaniach systemd lub crontab unikaj sleep, chyba że jest to absolutnie konieczne. Używaj timerów na poziomie systemu, gdy to możliwe.

Podsumowanie

Polecenie sleep jest prostym, ale potężnym narzędziem w skryptach Bash do kontrolowania czasu i tempa twoich skryptów. Niezależnie od tego, czy tworzysz opóźnienia między zadaniami, ograniczasz pętle, czy koordynujesz asynchroniczne działania, sleep daje ci precyzyjną kontrolę nad przepływem wykonania.

Używając go mądrze i rozumiejąc jego implikacje, możesz pisać bardziej przewidywalne, łatwe w utrzymaniu i stabilne skrypty na systemach Linux.