GNU/Linux >> Tutoriales Linux >  >> Linux

Shell:¿es posible retrasar un comando sin usar `sleep`?

Con bash incorporados, puedes hacer:

coproc read -t 10 && wait "$!" || true

Para dormir durante 10 segundos sin usar sleep . El coproc es hacer que read El stdin de es una tubería de la que nunca saldrá nada. || true es porque wait El estado de salida reflejará una entrega SIGALRM que haría que el shell se cerrara si errexit la opción está configurada.

En otras conchas:

mksh y ksh93 tener sleep incorporado, no tiene sentido usar nada más allí (aunque ambos también admiten read -t ).

zsh también admite read -t , pero también tiene un contenedor incorporado alrededor de select() , por lo que también puedes usar:

zmodload zsh/zselect
zselect -t 1000 # centiseconds

Si lo que desea es programar las cosas para que se ejecuten desde una sesión de shell interactiva, consulte también el zsh/sched módulo en zsh .


Tienes alternativas a sleep :Son at y cron . Contrario a sleep estos necesitan que proporcione la hora a la que necesita que se ejecuten.

  • Asegúrate de que el atd el servicio se ejecuta ejecutando service atd status .
    Ahora digamos que la fecha es a las 11:17 am UTC; si necesita ejecutar un comando a las 11:25 UTC, la sintaxis es:echo "This is a test" | at 11:25 .
    Ahora ten en cuenta que atd de forma predeterminada, no se registrará la finalización de los trabajos. Para obtener más información, consulte este enlace. Es mejor que su aplicación tenga su propio registro.

  • Puede programar trabajos en cron , para obtener más información, consulte:man cron para ver sus opciones o crontab -e para agregar nuevos trabajos. /var/log/cron se puede consultar para obtener información sobre la ejecución de los trabajos.

Para tu información sleep system call suspende la ejecución actual y la programa w.r.t. se le pasó el argumento.

EDITAR:

Como mencionó @Gaius, también puede agregar minutos a at comando. Pero digamos que el tiempo es 12:30:30 y ahora ejecutó el planificador con now +1 minutes . Aunque se especificó 1 minuto, que se traduce en 60 segundos, el at realmente no espera hasta 12:31:30 para ejecutar el trabajo, más bien ejecuta el trabajo en 12:31:00 . Las unidades de tiempo pueden ser minutes, hours, days, or weeks . Para obtener más información, consulte man at

por ejemplo:echo "ls" | at now +1 minutes


Algunas otras ideas.

top -d10 -n2 >/dev/null

vmstat 10 2 >/dev/null

sar 10 1 >/dev/null

timeout 10s tail -f /dev/null

Linux
  1. [Linux]:cómo excluir el directorio cuando se usa el comando de shell "tar"

  2. Comando de suspensión de Linux:demora durante un período de tiempo específico

  3. ¿Comando Sudo después de una larga llamada de suspensión sin volver a solicitar la contraseña de Sudo?

  4. ¿Un Xml sin Lf quiere hacerlo bonito usando el comando Sed en Shell?

  5. Usando el comando passwd desde dentro de un script de shell

Comprender fácilmente los comandos de Shell usando el script "Explain Shell" en Linux

Cómo cambiar automáticamente a un directorio sin usar el comando Cd en Linux

Diferentes formas de enumerar los contenidos del directorio sin usar el comando ls

Uso de la función de historial en Bash Shell en el servidor Ubuntu 16.04 LTS

¿Cómo puedo encontrar mi versión de shell usando un comando de Linux?

Agregar un retraso aleatorio para un comando de Linux