Introducción
Cuando el usuario emite una secuencia de comandos múltiples en Linux, los comandos se ejecutan inmediatamente uno tras otro o al mismo tiempo (por ejemplo, el comando tee). Sin embargo, a veces es necesario posponer la ejecución de comandos y dar tiempo suficiente para que el sistema produzca los resultados esperados.
En este tutorial, aprenderá a usar el sleep
de Linux Comando para retrasar la ejecución del comando en el terminal y scripts de shell.
Requisitos previos
- Un sistema que ejecuta Linux
- Acceso a la línea de comando
¿Qué hace el comando de suspensión de Linux?
El sleep
El comando suspende el proceso de llamada del siguiente comando durante un período de tiempo específico. Esta propiedad es útil cuando la ejecución del siguiente comando depende de la finalización exitosa de un comando anterior.
Explicación de la sintaxis del comando de suspensión de Linux
La sintaxis del sleep
el comando es simple:
sleep [number]
En el ejemplo anterior, después de sleep 5
se ejecutó, el segundo símbolo del sistema apareció con un retraso de 5 segundos.
De forma predeterminada, el sistema lee el número después de sleep
como el número de segundos. Para especificar otras unidades de tiempo, utilice la siguiente sintaxis:
sleep [number][unit]
El sleep
El comando acepta números de coma flotante. Permite múltiples valores, que se suman para calcular la duración del sleep
.
Las unidades disponibles son:
s
– segundosm
– minutosh
– horasd
– días
Para dejar de sleep
después de que comenzó y antes de que finalice el período de espera especificado, presione Ctrl + C
.
Para ver ayuda para sleep
comando, escriba:
sleep --help
Para obtener detalles de la versión, escriba:
sleep --version
Ejemplos de comandos de suspensión de Linux
Las siguientes secciones contienen ejemplos del uso de sleep
comando en la terminal o scripts de shell.
Configurar una alarma
Usa sleep
para decirle al sistema que reproduzca un archivo mp3 después de una cierta cantidad de tiempo. El ejemplo usa mplayer:
sleep 7h 30m && mplayer alarm.mp3
Comandos de retraso en la terminal
sleep
es útil para imponer un tiempo entre la ejecución de dos comandos. El siguiente ejemplo hace que echo
los comandos se ejecutan en intervalos de un segundo:
sleep 1 && echo "one" && sleep 1 && echo "two"
Asigne una variable al comando de suspensión
Es posible asignar una variable al sleep
dominio. Considere el siguiente script de 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}"
El script define una variable llamada SLEEP_INTERVAL
cuyo valor se usa más tarde como argumento para sleep
dominio. El resultado de este script de ejemplo muestra que la ejecución duró 30 segundos:
Definir intervalos de verificación
El siguiente ejemplo ilustra el uso de sleep
Comando en un script que verifica si un sitio web está en línea. El script se detiene si hace ping con éxito a un sitio web y sleep
introduce un retraso de 10 segundos entre pings fallidos.
#!/bin/bash
while :
do
if ping -c 1 www.google.com &> /dev/null
then
echo "Google is online"
break
fi
sleep 10
done
Permitir tiempo para la finalización de la operación
Es posible que esté ejecutando un script bash que llama internamente a otros dos scripts bash:uno que ejecuta pruebas en segundo plano y otro que imprime los resultados. Usa sleep
para evitar que la segunda secuencia de comandos imprima resultados incorrectos si se ejecuta antes de que se complete la primera secuencia de comandos:
while kill -0 $BACK_PID ; do
echo "Waiting for the process to end"
sleep 1
done
El kill -0 $BACK_PID
El comando verifica si el proceso del primer script aún se está ejecutando. Si es así, imprime el mensaje y duerme durante 1 segundo antes de volver a comprobarlo.
Predecir latencia
Usa sleep
para permitir la latencia de ciertas ejecuciones de comandos. El siguiente fragmento de secuencia de comandos muestra cómo sleep
le da a la CPU tiempo suficiente para realizar el cálculo antes de la siguiente iteración.
for (( i = 1 ; i <= 250 ; i++ ));
do
sleep 1
qsub computation"${i}".pbs
done