Introduzione
Quando l'utente esegue una sequenza di comandi multipli in Linux, i comandi vengono eseguiti immediatamente uno dopo l'altro o contemporaneamente (ad esempio, il comando tee). Tuttavia, a volte è necessario posticipare l'esecuzione dei comandi e fornire tempo sufficiente affinché il sistema produca i risultati attesi.
In questo tutorial imparerai come usare il sleep
di Linux comando per ritardare l'esecuzione del comando nel terminale e negli script della shell.
Prerequisiti
- Un sistema che esegue Linux
- Accesso alla riga di comando
Cosa fa il comando sleep di Linux?
Il sleep
comando sospende il processo di chiamata del comando successivo per un periodo di tempo specificato. Questa proprietà è utile quando l'esecuzione del comando successivo dipende dal completamento con successo di un comando precedente.
Spiegazione della sintassi del comando sleep di Linux
La sintassi del sleep
il comando è semplice:
sleep [number]
Nell'esempio sopra, dopo sleep 5
è stato eseguito, il secondo prompt dei comandi è apparso con un ritardo di 5 secondi.
Per impostazione predefinita, il sistema legge il numero dopo sleep
come numero di secondi. Per specificare altre unità di tempo, utilizza la seguente sintassi:
sleep [number][unit]
Il sleep
il comando accetta numeri in virgola mobile. Consente più valori, che vengono tutti sommati per calcolare la durata del sleep
.
Le unità disponibili sono:
s
– secondim
– minutih
– ored
– giorni
Per interrompere il sleep
dopo l'inizio e prima della fine del periodo di attesa specificato, premi Ctrl + C
.
Per vedere l'aiuto per il sleep
comando, digita:
sleep --help
Per i dettagli sulla versione, digita:
sleep --version
Esempi di comandi per la sospensione di Linux
Le sezioni seguenti contengono esempi di utilizzo del sleep
comando nel terminale o negli script della shell.
Imposta una sveglia
Usa sleep
per dire al sistema di riprodurre un file mp3 dopo un certo periodo di tempo. L'esempio utilizza mplayer:
sleep 7h 30m && mplayer alarm.mp3
Comandi di ritardo nel terminale
sleep
è utile per far rispettare un tempo tra l'esecuzione di due comandi. L'esempio seguente crea echo
i comandi vengono eseguiti a intervalli di un secondo:
sleep 1 && echo "one" && sleep 1 && echo "two"
Assegna una variabile al comando sleep
È possibile assegnare una variabile allo sleep
comando. Considera il seguente script di shell:
#!/bin/bash
SLEEP_INTERVAL="30"
CURRENT_TIME=$(date +"%T")
echo "Time before sleep: ${CURRENT_TIME}"
echo "Sleeping for ${SLEEP_INTERVAL} seconds"
sleep ${SLEEP_INTERVAL}
CURRENT_TIME=$(date +"%T")
echo "Time after sleep: ${CURRENT_TIME}"
Lo script definisce una variabile chiamata SLEEP_INTERVAL
il cui valore viene successivamente utilizzato come argomento per il sleep
comando. L'output di questo script di esempio mostra che l'esecuzione è durata 30 secondi:
Definisci intervalli di controllo
L'esempio seguente illustra l'uso di sleep
comando in uno script che controlla se un sito Web è online. Lo script si interrompe se esegue correttamente il ping di un sito Web e sleep
introduce un ritardo di 10 secondi tra i ping non riusciti.
#!/bin/bash
while :
do
if ping -c 1 www.google.com &> /dev/null
then
echo "Google is online"
break
fi
sleep 10
done
Concedi tempo per il completamento dell'operazione
Potresti eseguire uno script bash che chiama internamente altri due script bash:uno che esegue i test in background e un altro che stampa i risultati. Usa sleep
per evitare che il secondo script stampi risultati errati se viene eseguito prima del completamento del primo script:
while kill -0 $BACK_PID ; do
echo "Waiting for the process to end"
sleep 1
done
Il kill -0 $BACK_PID
comando controlla se il processo del primo script è ancora in esecuzione. Se lo è, stampa il messaggio e si ferma per 1 secondo prima di ricontrollare.
Prevedi la latenza
Usa sleep
per consentire la latenza di alcune esecuzioni di comandi. Lo snippet di script di seguito mostra come sleep
dà alla CPU abbastanza tempo per eseguire il calcolo prima dell'iterazione successiva.
for (( i = 1 ; i <= 250 ; i++ ));
do
sleep 1
qsub computation"${i}".pbs
done