Présentation
Lorsque l'utilisateur émet une séquence de commandes multiples sous Linux, les commandes s'exécutent immédiatement l'une après l'autre ou simultanément (par exemple, la commande tee). Cependant, il est parfois nécessaire de différer l'exécution des commandes et de laisser suffisamment de temps au système pour produire les résultats attendus.
Dans ce didacticiel, vous apprendrez à utiliser la sleep
de Linux commande pour retarder l'exécution de la commande dans les scripts du terminal et du shell.
Prérequis
- Un système exécutant Linux
- Accès à la ligne de commande
Que fait la commande Linux sleep ?
Le sleep
La commande suspend le processus d'appel de la commande suivante pendant une durée spécifiée. Cette propriété est utile lorsque l'exécution de la commande suivante dépend de la réussite d'une commande précédente.
Explication de la syntaxe de la commande Linux sleep
La syntaxe du sleep
la commande est simple :
sleep [number]
Dans l'exemple ci-dessus, après sleep 5
a été exécuté, la deuxième invite de commande est apparue avec un délai de 5 secondes.
Par défaut, le système lit le numéro après sleep
comme le nombre de secondes. Pour spécifier d'autres unités de temps, utilisez la syntaxe suivante :
sleep [number][unit]
Le sleep
La commande accepte les nombres à virgule flottante. Il permet plusieurs valeurs, qui sont toutes additionnées pour calculer la durée du sleep
.
Les unités disponibles sont :
s
– secondesm
– minutesh
– heuresd
– jours
Pour arrêter le sleep
après son démarrage et avant la fin de la période d'attente spécifiée, appuyez sur Ctrl + C
.
Pour voir l'aide pour le sleep
commande, tapez :
sleep --help
Pour les détails de la version, tapez :
sleep --version
Exemples de commandes de mise en veille Linux
Les sections suivantes contiennent des exemples d'utilisation de sleep
commande dans le terminal ou les scripts shell.
Configurer une alarme
Utiliser sleep
pour dire au système de lire un fichier mp3 après un certain temps. L'exemple utilise mplayer :
sleep 7h 30m && mplayer alarm.mp3
Retarder les commandes dans le terminal
sleep
est utile pour imposer un délai entre l'exécution de deux commandes. L'exemple suivant fait echo
les commandes s'exécutent à intervalles d'une seconde :
sleep 1 && echo "one" && sleep 1 && echo "two"
Attribuer une variable à la commande sleep
Il est possible d'affecter une variable au sleep
commande. Considérez le script shell suivant :
#!/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}"
Le script définit une variable appelée SLEEP_INTERVAL
dont la valeur est ensuite utilisée comme argument du sleep
commande. La sortie de cet exemple de script montre que l'exécution a duré 30 secondes :
Définir les intervalles de vérification
L'exemple suivant illustre l'utilisation du sleep
commande dans un script qui vérifie si un site Web est en ligne. Le script s'arrête s'il réussit à envoyer un ping à un site Web et sleep
introduit un délai de 10 secondes entre les pings infructueux.
#!/bin/bash
while :
do
if ping -c 1 www.google.com &> /dev/null
then
echo "Google is online"
break
fi
sleep 10
done
Laisser du temps pour l'achèvement de l'opération
Vous exécutez peut-être un script bash qui appelle en interne deux autres scripts bash - un qui exécute des tests en arrière-plan et un autre qui imprime les résultats. Utiliser sleep
pour empêcher le deuxième script d'afficher les mauvais résultats s'il s'exécute avant la fin du premier script :
while kill -0 $BACK_PID ; do
echo "Waiting for the process to end"
sleep 1
done
Le kill -0 $BACK_PID
La commande vérifie si le processus du premier script est toujours en cours d'exécution. Si c'est le cas, il imprime le message et se met en veille pendant 1 seconde avant de vérifier à nouveau.
Prédire la latence
Utiliser sleep
pour permettre la latence de certaines exécutions de commandes. L'extrait de script ci-dessous montre comment sleep
donne au CPU suffisamment de temps pour effectuer le calcul avant la prochaine itération.
for (( i = 1 ; i <= 250 ; i++ ));
do
sleep 1
qsub computation"${i}".pbs
done