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 ejecutandoservice 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 queatd
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 ocrontab -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