Si estoy ejecutando un proceso largo, ¿hay alguna forma de ejecutar algunos comandos basados en el tiempo?
Por ejemplo, estoy ejecutando un proceso realmente largo que dura aproximadamente 10 minutos.
Después de 5 minutos, me gustaría ejecutar un comando por separado. Por ejemplo, el comando separado podría ser:echo 5 minutes complete
(Nota: no quiero avanzar hacia la finalización del comando, sino simplemente comandos ejecutados después de intervalos especificados).
¿Es posible?
shell-script
shell
delay
Aniket Bhattacharyea
fuente
fuente

longcommand & sleep 300 && command-to-do-after-five-minutes? (En realidad, eso es probablemente lo que está buscando). Tenga en cuenta que su aclaración no fue suficiente, ya que obtuvo dos implementaciones de barra de progreso de reloj desde el principio.Respuestas:
Solo corre:
El
do-this-after-five-minutesse ejecutará después de cinco minutos. Ellong-commandse ejecutará en segundo plano.fuente
sleep 5m && foobar, así que si cambio de opinión y ^ Csleep, el siguiente comando no se ejecuta.sleep 3; lsy^C, el segundo comando no se ejecuta de todos modos. ¿No estoy seguro de por qué y tal vez funciona de manera diferente en un shell no interactivo?sleep 5m && echoestá durmiendo, cuando suspende, solo se suspende elsleepcomando. El resto de la línea de comando se ejecuta, pero desde quesleepse suspendió, no salió con éxito y&&se omite la parte posterior . Intenta suspendersleep 5 || echo helloyhelloaparece directamente después de presionar^Z.at(1), para cosas comosleep 30m && mplayer something.mp3recordatorio de alarma o parasleep 90m && fgreanudar un comando intensivo en disco más tarde. Entonces, en realidad,sleep 5m && echo helloes bueno porque se^Zsuspendesleepsin ejecutar el siguiente comando. Si desea poder suspender / reanudar todo el comando compuesto, incluso antes de que salga el sueño, use( sleep 2 && echo hello ).&&modismo le permite estar absolutamente seguro de que no cancela el proceso justo después de que se ejecute el sueño (porque no puede^Zejecutar el comando, en lugar de arriesgarse a^C). Esto es útil en lasleep && fgosleep && bgel uso de los casos, cuando el ser reanudó comando es parte del camino a través de algo lento.Podrías usar este script:
Ejecuta su
longprocessensub-shellay luego monitorea la existencia del archivo 'lock' previamente creado.fuente
man bashparaSECONDS. Se puede establecerSECONDS=0en el arranque de la escritura y sólo comprobar si hay mayor o igual a 300 o el conjuntoSECONDS=$((date +%s))y olvidarse de usardatede nuevo en el script ...sleep 1sestar siempre exactamente un segundo más tarde que antessleep 1s... entonces has sido víctima de falsedades que los programadores creen sobre el tiempo . (Aunque en este caso, también podría mostrar una barra de progreso de marca hash o algo así).sleepen absoluto!SECONDS! :)Hay una línea para esto:
En su caso, TIMEOUT = 5m y COMMAND es el comando largo.
También vea mi respuesta a esta publicación Tiempo de espera con 'reinicio de red de servicio'
fuente
jobs %1falla una vez que el trabajo% 1 se ha detenido.Tenga en cuenta que para tiempos más largos, $ segundos pueden no estar sincronizados con el tiempo real. Es mejor almacenar la hora de inicio y calcular la diferencia con la hora real.
fuente