Quando si scrivono script Bash su Linux, ci sono molte occasioni in cui è necessario introdurre una pausa o un ritardo nell’esecuzione. Che si tratti di strozzare le richieste API, di attendere il completamento di un processo o di simulare operazioni basate sul tempo, il comando sleep è l’utility ideale.

In questo articolo esploreremo come utilizzare sleep in modo efficace in Bash, compresi esempi reali, unità di tempo e suggerimenti per un uso avanzato.

Cos’è il comando sleep?

Il comando sleep mette in pausa l’esecuzione di uno script o di un comando per un determinato periodo di tempo. È disponibile per impostazione predefinita su quasi tutti i sistemi Unix-like, compresi Linux e macOS.

Sintassi di base:

sleep NUMERO[SUFFIX]
  • NUMERO: la durata

  • SUFFIX (facoltativo): l’unità di tempo(s, m, h, d)

Se non viene specificato alcun suffisso, si assumono i secondi.

Casi d’uso pratici negli script Bash

1. Pausa tra i comandi

#!/bin/bash
echo "Avvio del processo..."
sleep 3
echo "Processo ripreso dopo 3 secondi"

2. Ritardare l’esecuzione nei loop

#!/bin/bash
per i in {1..5}; do
echo "Ping $i"
dormire 1
fatto

3. Attendere l’avvio dei servizi

Se si sta lanciando un processo in background che richiede tempo per inizializzarsi:

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

4. Limitazione della velocità negli script

Quando si interagisce con le API o si eseguono operazioni ripetitive che richiedono il throttling:

#!/bin/bash
per url in $(cat urls.txt); fare
curl -s "$url"
sleep 2 # Evitare di sovraccaricare il server
fatto

Attenzione: Usare Sleep in modo responsabile

  • L’uso eccessivo di sleep può portare a script inefficienti, soprattutto in ambienti che richiedono prestazioni elevate.

  • Per gli script guidati da eventi, considerare inotifywait o condizionali basati sulla logica invece di sleep arbitrari.

  • Nell’automazione o in DevOps, evitare lunghe durate di sleep a meno che non sia strettamente necessario, preferendo il polling con logica di timeout.

Suggerimenti professionali

  • Usate sleep con & per eseguirlo in background:

    sleep 5 & # Continua l'esecuzione immediatamente mentre dorme in background
  • Combinare con wait, se necessario:

    sleep 5 &
    attendere
    echo "Atteso che lo sleep finisca"
  • Nei task di systemd o crontab, evitare sleep a meno che non sia assolutamente necessario. Usare timer a livello di sistema quando possibile.

Conclusione

Il comando sleep è uno strumento semplice ma potente nello scripting Bash per controllare i tempi e il ritmo dei vostri script. Sia che si tratti di creare ritardi tra i task, di strozzare i loop o di coordinare azioni asincrone, sleep consente di controllare con precisione il flusso di esecuzione.

Utilizzandolo con saggezza e comprendendone le implicazioni, è possibile scrivere script più prevedibili, manutenibili e stabili sui sistemi Linux.