Articles

Comando Bash Sleep: una Guía Rápida para usarlo en tus Scripts

normalmente queremos que un script se ejecute rápido, pero no siempre es el caso. A veces tiene sentido que nuestro script Bash use el comando sleep antes de ejecutar el siguiente comando. Averigüemos cuándo

¿Qué es el comando Bash sleep?

el comando Bash sleep retrasa la ejecución del comando después de él durante un tiempo determinado. El tiempo de sueño se expresa en segundos. El uso del comando sleep es común cuando se programa una tarea cada X segundos o cuando un script se basa en otro script para completar su ejecución.,

veamos tres escenarios en los que usaría el comando sleep:

  1. en lugar de ejecutar un comando inmediatamente, desea programar su ejecución X segundos en el futuro.
  2. Un programa tarda mucho tiempo en procesar un conjunto de archivos y cuando se completa el procesamiento genera un archivo para indicarlo. Usted puede escribir un script que comprueba si el fichero existe y se duerme durante un cierto período de tiempo si no. De lo contrario, se ejecuta el siguiente paso del proceso, basado en los archivos generados por el programa.,
  3. está llamando a una API de terceros mediante programación y sabe que la API no permite más de 60 solicitudes por minuto. Dormir durante X segundos le permite asegurarse de no pasar por encima del número de solicitudes por minuto permitidas por el proveedor de API.

¡comencemos!,

sintaxis básica del comando Bash Sleep

la sintaxis básica del comando sleep en Bash es muy simple:

sleep <SECONDS>

esto es lo que sucede si lo ejecuta en la línea de comandos:

$ sleep 5$ 

en este caso, después de ejecutar el comando sleep 5, Linux devuelve el shell después de 5 segundos.

y ahora vamos a pasar a tres ejemplos prácticos de cómo el comando Bash sleep.,

escenario 1: Comando Sleep que retrasa la ejecución de otro comando en un Script Bash

escribiré un simple script de shell Bash para mostrar el comportamiento exacto del comando sleep

considering teniendo en cuenta que el ejemplo anterior no podía mostrar realmente que el comando sleep devolviera el shell después de 5 segundos.

vamos a escribir un script que haga lo que he explicado en el escenario 1, retrasa la ejecución de un comando por X segundos (en este caso 5 segundos).

es casi como ejecutar un comando en un momento específico siguiendo el mismo principio de los planificadores de trabajos.,

por lo tanto, cree un script de shell Bash muy simple llamado delay_cmd.sh:

#!/bin/bash datesleep 5dateuptime 

el comando date se usa para imprimir la fecha actual antes y después del comando sleep, de esta manera puede ver que el script está suspendido durante 5 segundos.

Después de 5 segundos se ejecuta el comando uptime.

tiene sentido?

en teoría podemos escribir el mismo script en una sola línea:

#!/bin/bash date; sleep 5; date; uptime 

esto se debe a que el punto y coma se usa en Linux para separar diferentes comandos y ejecutarlos secuencialmente.,

En otras palabras, Linux se asegura de que cada comando se complete antes de ejecutar el siguiente.

escenario 2: Script Bash que utiliza el comando Sleep para esperar a que otro Script se Complete

en este ejemplo crearé dos scripts:

  1. program_1.sh: duerme 30 segundos y luego crea un archivo llamado stage1.completo. Esto básicamente simula un programa que tarda mucho tiempo en completar una tarea específica y confirma la finalización de su ejecución mediante la creación de la etapa 1.archivo completo.
  2. program_2.sh: utiliza un bucle while y en cada iteración comprueba si la stage1.,el archivo completo existe. Si no lo hace duerme durante 6 segundos, si el archivo existe imprime el mensaje » File stage1.completa existe. Stage 1 complete, starting Stage 2 Stage»(en inglés).

Aquí program_1.sh:

#!/bin/bash sleep 30touch stage1.complete 

El comando touch es utilizado por el primer programa para crear el stage1.complete el archivo después de 30 segundos desde el momento en que se ejecuta el script.

y program_2.sh es lo siguiente, estaremos usando una sentencia Bash if else para implementarla:

en el segundo script de shell Bash tenemos un bucle infinito., En cada iteración el script:

  • comprueba si el archivo stage1.completo está presente.
  • Si el archivo no existe duerme durante 6 segundos
  • Si el archivo existe se quita el stage1.complete el archivo y detenga la ejecución usando el comando Bash exit.,

antes de ejecutar los dos scripts asegúrese de que ambos sean ejecutables usando el comando chmod +x:

chmod +x program_*.sh

así que, ejecutemos los scripts

ejecutaremosprogram_1.sh primero, lo ejecutaremos en segundo plano para que podamos ejecutarprogram_2.sh inmediatamente después de eso en el mismo terminal:

como se esperaba, el segundo script sigue durmiendo durante 6 segundos hasta que encuentra el archivo STAGE1.archivo completo, y luego se detiene su ejecución.,

escenario 3: comando Sleep para controlar el número de llamadas a una API de terceros

si desea llamar a una API utilizando un script Bash, puede usar el comando curl.

usar curl para llamar a una API es simple, tomemos por ejemplo el siguiente punto final de la API:

https://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=b6907d289e10d714a6e88b30761fae22 

escribiremos un script Bash que usa curl para realizar una solicitud GET contra él y usa el comando sleep para limitar el número de llamadas a la API en un cierto período de tiempo.

esto se hace para evitar sobrepasar cualquier límite potencial impuesto por el proveedor de API.,

Este es el script que he escrito:

algunas cosas sobre este script:

  • La variable contador se utiliza para contar el número de llamadas a la API que se ejecutarán antes de salir del bucle while.
  • cURL se utiliza para realizar las solicitudes GET en el punto final de la API.
  • En cada iteración del bucle while suspendemos el script durante 10 segundos con el comando sleep para limitar el número de llamadas a la API a una cada 10 segundos.
  • incrementamos la variable contador usando el operador aritmético $(( )).,

entonces, ejecute el script:

como se espera se ejecutan dos llamadas API y luego la ejecución del bucle while se detiene porque el valor del contador de variables es 3.

conclusión

le he mostrado diferentes formas de usar el comando sleep en un script Bash.

y en el proceso he cubierto muchas cosas diferentes:

  • ejecutando scripts en segundo plano.
  • Usando el operador aritmético.
  • bucles while infinitos.
  • contador de variables.
  • llamando a una API usando curl.
  • Crear y eliminar archivos.,
  • Establecer permisos ejecutables para scripts Bash.
  • Usando el punto y coma para ejecutar comandos secuencialmente.

espero que haga todo sentido!

¿Y tú? ¿De qué otra manera usarías el comando sleep en Bash? 🙂

Curso Gratuito relacionado: Decipher Bash Scripting