Comando Bash Sleep: Una guida rapida per usarlo nei tuoi script
Di solito vogliamo che uno script funzioni velocemente, ma non è sempre così. A volte ha senso per il nostro script Bash usare il comando sleep prima di eseguire il comando successivo. Scopriamo quando
Qual è il comando Bash sleep?
Il comando Bash sleep ritarda l’esecuzione del comando dopo di esso per un determinato periodo di tempo. Il tempo di sonno è espresso in secondi. L’uso del comando sleep è comune quando si pianifica un’attività ogni X secondi o quando uno script si basa su un altro script per completare la sua esecuzione.,
Diamo un’occhiata a tre scenari in cui si utilizza il comando sleep:
- Invece di eseguire immediatamente un comando, si desidera pianificare la sua esecuzione X secondi in futuro.
- Un programma richiede molto tempo per elaborare un insieme di file e quando l’elaborazione è completa genera un file per indicarlo. È possibile scrivere uno script che controlla se quel file esiste e dorme per un certo periodo di tempo se non lo fa. Altrimenti esegue la fase successiva del processo in base ai file generati dal primo programma.,
- Stai chiamando un’API di terze parti a livello di codice e sai che l’API non consente più di 60 richieste al minuto. Dormire per X secondi ti consente di assicurarti di non superare il numero di richieste al minuto consentite dal provider API.
Cominciamo!,
Sintassi di Base di Bash il Comando di Sospensione
La sintassi di base del sonno comando in Bash è molto semplice:
sleep <SECONDS>
Ecco cosa succede se si esegue la riga di comando:
$ sleep 5$
In questo caso, dopo l’esecuzione del sonno 5 comando Linux restituisce la parte posteriore shell dopo 5 secondi.
E ora passiamo a tre esempi pratici di come il comando Bash sleep.,
Scenario 1: Comando Sleep che ritarda l’esecuzione di un altro comando in uno script Bash
Scriverò un semplice script Bash shell per mostrare l’esatto comportamento del comando sleep considering
considering considerando che l’esempio precedente non poteva mostrare che il comando sleep restituiva la shell dopo 5 secondi.
Scriviamo uno script che fa quello che ho spiegato nello Scenario 1, ritarda l’esecuzione di un comando di X secondi (in questo caso 5 secondi).
È quasi come eseguire un comando in un momento specifico seguendo lo stesso principio degli scheduler di lavoro.,
Quindi, crea uno script Bash shell molto semplice chiamatodelay_cmd.sh
:
#!/bin/bash datesleep 5dateuptime
Il comando date viene utilizzato per stampare la data corrente prima e dopo il comando sleep, in questo modo puoi vedere che lo script è sospeso per 5 secondi.
Dopo 5 secondi viene eseguito il comando uptime.
Ha senso?
In teoria possiamo scrivere lo stesso script in una singola riga:
#!/bin/bash date; sleep 5; date; uptime
Questo perché il punto e virgola è usato in Linux per separare diversi comandi ed eseguirli in sequenza.,
In altre parole, Linux si assicura che ogni comando venga completato prima di eseguire quello successivo.
Scenario 2: Script Bash che utilizza il comando Sleep per attendere il completamento di un altro script
In questo esempio creerò due script:
- program_1.sh: dorme per 30 secondi e quindi crea un file chiamato stage1.completo. Questo simula fondamentalmente un programma che richiede molto tempo per completare un’attività specifica e conferma il completamento della sua esecuzione creando lo stage1.file completo.
- program_2.sh: utilizza un ciclo while e ad ogni iterazione controlla se lo stage1.,il file completo esiste. Se non lo fa dorme per 6 secondi, se il file esiste stampa il messaggio ” File stage1.completo esiste. Fase 1 completa, avvio Fase 2…”.
Ecco program_1.sh:
#!/bin/bash sleep 30touch stage1.complete
Il comando touch viene utilizzato dal primo programma per creare la stage1.completa il file dopo 30 secondi dal momento in cui lo script viene eseguito.
E program_2.sh è il seguente, useremo un’istruzione Bash if else per implementarlo:
Nel secondo script di shell Bash abbiamo un ciclo infinito., Ad ogni iterazione lo script:
- Controlla se il file stage1.completo è presente.
- Se il file non esiste dorme per 6 secondi
- Se il file esiste rimuove lo stage1.completa il file e interrompe l’esecuzione utilizzando il comando Bash exit.,
Prima di eseguire i due script, assicurarsi che essi sono sia eseguibile con chmod +x comando:
chmod +x program_*.sh
Quindi, cerchiamo di eseguire gli script…
viene program_1.sh
in primo luogo, ci verrà eseguito in background in modo che siamo in grado di eseguire program_2.sh
subito dopo che lo stesso terminale:
Come previsto il secondo script mantiene dormire per 6 secondi fino a quando non trova il file stage1.completa il file, e poi lo arresta l’esecuzione.,
Scenario 3: Comando Sleep per controllare il numero di chiamate a un’API di terze parti
Se si desidera chiamare un’API utilizzando uno script Bash è possibile utilizzare il comando curl.
Usare curl per chiamare un’API è semplice, prendiamo ad esempio il seguente endpoint API:
https://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=b6907d289e10d714a6e88b30761fae22
Scriveremo uno script Bash che usa curl per eseguire una richiesta GET contro di esso e usa il comando sleep per limitare il numero di chiamate API in un certo periodo di tempo.
Questo viene fatto per evitare di superare qualsiasi potenziale limite imposto dal provider API.,
Questo è lo script che ho scritto:
Poche cose su questo script:
- La variabile COUNTER viene utilizzata per contare il numero di chiamate API da eseguire prima di uscire dal ciclo while.
- cURL viene utilizzato per eseguire le richieste GET contro l’endpoint API.
- Ad ogni iterazione del ciclo while sospendiamo lo script per 10 secondi con il comando sleep per limitare il numero di chiamate API a una ogni 10 secondi.
- Incrementiamo la variabile CONTATORE usando l’operatore aritmetico arithmetic (()).,
Quindi, eseguire lo script:
Come previsto vengono eseguite due chiamate API e quindi l’esecuzione del ciclo while si arresta perché il valore del CONTATORE variabile è 3.
Conclusione
Ti ho mostrato diversi modi per usare il comando sleep in uno script Bash.
E nel processo ho coperto molte cose diverse:
- Esecuzione di script in background.
- Utilizzando l’operatore aritmetico.
- Infinito mentre loop.
- Variabili del contatore.
- Chiamare un’API usando curl.
- Creazione e rimozione di file.,
- Impostazione delle autorizzazioni eseguibili per gli script Bash.
- Utilizzando il punto e virgola per eseguire i comandi in sequenza.
Spero che abbia tutto un senso!
E tu? In quale altro modo useresti il comando sleep in Bash? 🙂
Corso GRATUITO correlato: Decifrare Bash Scripting