Délai d'exécution Linux

LinuxBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous apprendrez à utiliser la commande sleep sous Linux, qui vous permet d'introduire des pauses ou des délais programmés dans vos scripts et séquences de commandes. La capacité à contrôler le temps est essentielle pour de nombreuses tâches de scripting, telles que la création de périodes d'attente entre les opérations, la simulation d'interactions utilisateur ou le contrôle du flux d'exécution des scripts.

À la fin de ce laboratoire, vous comprendrez comment utiliser la commande sleep avec des valeurs fixes et des variables pour créer des contrôles temporels flexibles dans vos scripts shell Linux.

Comprendre la commande sleep

La commande sleep sous Linux est un utilitaire simple mais puissant qui met en pause l'exécution d'un script ou d'une séquence de commandes pendant une durée spécifiée. Cela est particulièrement utile dans les scripts shell lorsque vous avez besoin de créer des délais entre les commandes.

Commençons par explorer l'utilisation de base de la commande sleep.

Tout d'abord, accédez à votre répertoire de projet :

cd ~/project

Maintenant, essayons d'utiliser directement la commande sleep dans le terminal. Tapez la commande suivante :

echo "Start time: $(date +%H:%M:%S)"
sleep 3
echo "End time: $(date +%H:%M:%S)"

Lorsque vous exécutez cette séquence de commandes, vous verrez l'heure de départ affichée, suivie d'une pause de 3 secondes, puis l'heure de fin. La sortie ressemblera à ceci :

Start time: 10:15:30
End time: 10:15:33

La syntaxe de base de la commande sleep est :

sleep NUMBER[SUFFIX]

Où :

  • NUMBER est la durée de la pause
  • SUFFIX est facultatif et peut être :
    • s pour les secondes (valeur par défaut si aucun suffixe n'est spécifié)
    • m pour les minutes
    • h pour les heures
    • d pour les jours

Essayons quelques exemples pour voir comment fonctionnent les différentes unités de temps :

## Sleep for 5 seconds
echo "Sleeping for 5 seconds..."
sleep 5
echo "Done!"

## Sleep for 0.5 seconds (half a second)
echo "Sleeping for half a second..."
sleep 0.5
echo "Done!"

Maintenant, vous comprenez le fonctionnement de base de la commande sleep. Dans l'étape suivante, nous l'intégrerons dans un script shell.

Création d'un script shell de base avec la commande sleep

Maintenant que vous comprenez le fonctionnement de la commande sleep, créons un script shell qui l'utilise. Les scripts shell vous permettent d'automatiser des séquences de commandes et sont un outil fondamental dans l'administration Linux.

Tout d'abord, créons un nouveau fichier de script shell dans votre répertoire de projet :

cd ~/project
touch delay_script.sh

Ensuite, ouvrez le fichier à l'aide de l'éditeur de texte nano :

nano delay_script.sh

Ajoutez le contenu suivant au fichier :

#!/bin/zsh

echo "Starting the script..."
echo "First message appears immediately."
sleep 2
echo "Second message appears after 2 seconds."
sleep 3
echo "Third message appears after 3 more seconds."
echo "Script execution complete."

Pour enregistrer le fichier dans nano, appuyez sur Ctrl+O, puis appuyez sur Entrée pour confirmer, et enfin appuyez sur Ctrl+X pour quitter l'éditeur.

Avant de pouvoir exécuter le script, nous devons le rendre exécutable :

chmod +x delay_script.sh

Maintenant, exécutons le script :

./delay_script.sh

Vous devriez voir les messages apparaître avec les délais spécifiés :

Starting the script...
First message appears immediately.
Second message appears after 2 seconds.
Third message appears after 3 more seconds.
Script execution complete.

Ce simple script montre comment la commande sleep peut être utilisée pour contrôler le moment où les messages sont affichés. Cette technique est utile dans de nombreux scénarios de scripting, tels que :

  1. Simulation d'interactions utilisateur
  2. Attente de la fin d'un processus
  3. Création d'indicateurs de progression
  4. Limitation du débit des opérations

Examinons ce que fait le script ligne par ligne :

  1. #!/bin/zsh - C'est ce qu'on appelle une ligne shebang, qui spécifie que le script doit être exécuté avec le shell zsh.
  2. echo "Starting the script..." - Affiche le message initial.
  3. echo "First message appears immediately." - Affiche le premier message immédiatement.
  4. sleep 2 - Met en pause l'exécution du script pendant 2 secondes.
  5. echo "Second message appears after 2 seconds." - Affiche le deuxième message après un délai de 2 secondes.
  6. sleep 3 - Met en pause l'exécution du script pendant 3 secondes supplémentaires.
  7. echo "Third message appears after 3 more seconds." - Affiche le troisième message après un délai de 3 secondes.
  8. echo "Script execution complete." - Affiche le message final.

Dans l'étape suivante, nous explorerons comment rendre les durées de pause plus flexibles en utilisant des variables.

Utilisation de variables avec la commande sleep

Dans les scripts du monde réel, vous avez souvent besoin d'une plus grande flexibilité que les durées de pause codées en dur. L'utilisation de variables pour les temps de pause rend vos scripts plus adaptables et plus faciles à maintenir. Créons un nouveau script qui illustre ce concept.

Tout d'abord, créez un nouveau fichier :

cd ~/project
touch variable_delay.sh

Ouvrez le fichier avec nano :

nano variable_delay.sh

Ajoutez le contenu suivant :

#!/bin/zsh

## Define delay durations as variables
SHORT_DELAY=1
MEDIUM_DELAY=3
LONG_DELAY=5

echo "Starting the script with variable delays..."

echo "This is displayed immediately."
echo "Waiting for a short delay (${SHORT_DELAY} seconds)..."
sleep $SHORT_DELAY
echo "Short delay completed."

echo "Waiting for a medium delay (${MEDIUM_DELAY} seconds)..."
sleep $MEDIUM_DELAY
echo "Medium delay completed."

echo "Waiting for a long delay (${LONG_DELAY} seconds)..."
sleep $LONG_DELAY
echo "Long delay completed."

echo "Script execution complete."

Enregistrez et quittez nano en utilisant Ctrl+O, Entrée et Ctrl+X.

Rendez le script exécutable :

chmod +x variable_delay.sh

Maintenant, exécutez le script :

./variable_delay.sh

La sortie sera similaire à :

Starting the script with variable delays...
This is displayed immediately.
Waiting for a short delay (1 seconds)...
Short delay completed.
Waiting for a medium delay (3 seconds)...
Medium delay completed.
Waiting for a long delay (5 seconds)...
Long delay completed.
Script execution complete.

Comprenons pourquoi l'utilisation de variables pour les temps de pause est avantageuse :

  1. Lisibilité : L'utilisation de noms de variables descriptifs comme SHORT_DELAY rend le code auto - documenté.
  2. Maintenabilité : Si vous avez besoin de changer un temps de pause, vous n'avez qu'à le modifier en un seul endroit (la déclaration de la variable) plutôt que partout dans le script.
  3. Cohérence : Si la même durée de pause est utilisée plusieurs fois, l'utilisation d'une variable garantit que toutes les instances utilisent la même valeur.
  4. Flexibilité : Vous pouvez facilement changer les temps de pause en modifiant simplement les valeurs des variables.

Vous pouvez également effectuer des calculs avec ces variables. Créons un autre script pour le démontrer :

cd ~/project
touch calculated_delay.sh
nano calculated_delay.sh

Ajoutez le contenu suivant :

#!/bin/zsh

## Base delay time in seconds
BASE_DELAY=2

echo "Starting script with calculated delays..."

## Using the base delay
echo "Waiting for the base delay (${BASE_DELAY} seconds)..."
sleep $BASE_DELAY
echo "Base delay completed."

## Double the base delay
DOUBLE_DELAY=$((BASE_DELAY * 2))
echo "Waiting for double the base delay (${DOUBLE_DELAY} seconds)..."
sleep $DOUBLE_DELAY
echo "Double delay completed."

## Half the base delay
HALF_DELAY=$(echo "scale=1; $BASE_DELAY / 2" | bc)
echo "Waiting for half the base delay (${HALF_DELAY} seconds)..."
sleep $HALF_DELAY
echo "Half delay completed."

echo "Script execution complete."

Enregistrez, quittez nano et rendez le script exécutable :

chmod +x calculated_delay.sh

Exécutez le script :

./calculated_delay.sh

La sortie sera similaire à :

Starting script with calculated delays...
Waiting for the base delay (2 seconds)...
Base delay completed.
Waiting for double the base delay (4 seconds)...
Double delay completed.
Waiting for half the base delay (1.0 seconds)...
Half delay completed.
Script execution complete.

Cela montre comment vous pouvez calculer dynamiquement les temps de pause en fonction d'une seule valeur de base, rendant vos scripts encore plus flexibles et puissants.

Applications pratiques de la commande sleep

Maintenant que vous comprenez les bases de la commande sleep et comment l'utiliser avec des variables, explorons quelques applications pratiques. Ces exemples montrent comment la commande sleep est utilisée dans des scénarios du monde réel.

Création d'un simple minuteur de compte à rebours

Créons un minuteur de compte à rebours qui illustre une utilisation plus complexe de la commande sleep :

cd ~/project
touch countdown.sh
nano countdown.sh

Ajoutez le contenu suivant :

#!/bin/zsh

## Function to display a countdown
countdown() {
  local seconds=$1
  while [ $seconds -gt 0 ]; do
    echo -ne "\rTime remaining: $seconds seconds "
    sleep 1
    ((seconds--))
  done
  echo -e "\rCountdown complete!            "
}

## Specify the countdown duration
echo "Starting a 5-second countdown:"
countdown 5
echo "Countdown script execution complete."

Enregistrez, quittez nano et rendez le script exécutable :

chmod +x countdown.sh

Exécutez le script :

./countdown.sh

Vous devriez voir un compte à rebours de 5 secondes à 0, avec la mise à jour du temps sur place :

Starting a 5-second countdown:
Time remaining: 5 seconds
Time remaining: 4 seconds
Time remaining: 3 seconds
Time remaining: 2 seconds
Time remaining: 1 seconds
Countdown complete!
Countdown script execution complete.

Simulation d'un processus avec indicateur de progression

Créons un script qui simule un processus long avec un simple indicateur de progression :

cd ~/project
touch progress.sh
nano progress.sh

Ajoutez le contenu suivant :

#!/bin/zsh

## Function to show a simple progress bar
show_progress() {
  local duration=$1
  local steps=10
  local step_duration=$(echo "scale=2; $duration / $steps" | bc)

  echo "Starting process..."
  echo -n "Progress: ["
  for i in {1..10}; do
    sleep $step_duration
    echo -n "#"
  done
  echo "] Done!"
}

## Run a process that takes 5 seconds with a progress indicator
show_progress 5
echo "Process completed successfully."

Enregistrez, quittez nano et rendez le script exécutable :

chmod +x progress.sh

Exécutez le script :

./progress.sh

Vous devriez voir une barre de progression qui se remplit en 5 secondes :

Starting process...
Progress: [##########] Done!
Process completed successfully.

Contrôle du débit des opérations

Dans cet exemple, nous allons montrer comment utiliser la commande sleep pour contrôler le débit des opérations, ce qui est utile pour limiter le taux d'appels API ou traiter de grands ensembles de données :

cd ~/project
touch rate_limit.sh
nano rate_limit.sh

Ajoutez le contenu suivant :

#!/bin/zsh

## Define the rate limit (operations per second)
OPERATIONS_PER_SECOND=2
SLEEP_DURATION=$(echo "scale=3; 1 / $OPERATIONS_PER_SECOND" | bc)

echo "Performing operations at a rate of $OPERATIONS_PER_SECOND per second"
echo "Each operation will be followed by a $SLEEP_DURATION second delay"

## Simulate 6 operations with rate limiting
for i in {1..6}; do
  echo "Performing operation $i at $(date +%H:%M:%S.%N | cut -c1-12)"
  ## Simulate the operation
  sleep 0.1
  ## Rate-limiting delay between operations
  if [ $i -lt 6 ]; then
    sleep $SLEEP_DURATION
  fi
done

echo "All operations completed"

Enregistrez, quittez nano et rendez le script exécutable :

chmod +x rate_limit.sh

Exécutez le script :

./rate_limit.sh

Vous devriez voir les opérations être effectuées à un débit contrôlé :

Performing operations at a rate of 2 per second
Each operation will be followed by a 0.500 second delay
Performing operation 1 at 10:30:45.12
Performing operation 2 at 10:30:45.72
Performing operation 3 at 10:30:46.32
Performing operation 4 at 10:30:46.92
Performing operation 5 at 10:30:47.52
Performing operation 6 at 10:30:48.12
All operations completed

Ces exemples montrent comment la commande sleep peut être utilisée dans des scénarios de scripting plus avancés. La capacité à contrôler le timing est un outil puissant dans le scripting shell qui permet de nombreuses applications pratiques.

Résumé

Dans ce laboratoire, vous avez appris à utiliser la commande sleep sous Linux pour introduire des délais programmés dans vos scripts shell. Il s'agit d'une compétence fondamentale pour l'écriture de scripts et les opérations en ligne de commande nécessitant un contrôle du temps.

Concepts clés abordés dans ce laboratoire :

  1. Utilisation de base de la commande sleep avec différentes unités de temps (secondes, minutes, heures)
  2. Création de scripts shell intégrant la commande sleep
  3. Utilisation de variables pour rendre les durées de pause plus flexibles et faciles à maintenir
  4. Effectuation de calculs avec des variables de durée de pause
  5. Applications pratiques de la commande sleep :
    • Création de minuteurs de compte à rebours
    • Mise en œuvre d'indicateurs de progression
    • Contrôle du débit des opérations

Ces compétences seront précieuses dans de nombreux scénarios de scripting Linux, notamment :

  • Automatisation de tâches nécessitant un timing spécifique
  • Création d'interfaces conviviales avec des pauses appropriées
  • Mise en œuvre de la limitation du taux pour les appels API ou les opérations gourmandes en ressources
  • Simulation d'interactions utilisateur
  • Gestion du flux d'exécution des scripts

En maîtrisant la commande sleep, vous disposez désormais d'un outil important dans votre boîte à outils de scripting Linux qui vous aidera à créer des scripts plus sophistiqués et conviviaux.