Executar o comando após um determinado período de tempo?

22

Se eu estiver executando um processo longo, existe alguma maneira de executar alguns comandos baseados em tempo?

Por exemplo, estou executando um processo muito longo que dura cerca de 10 minutos.

Após 5 minutos, gostaria de executar um comando separado. Por exemplo, o comando separado poderia ser: echo 5 minutes complete

(Nota: eu não quero progresso em direção à conclusão do comando, mas simplesmente comandos executados após intervalos especificados).

É possível?

    
por Aniket Bhattacharyea 28.05.2016 / 10:49

4 respostas

24

Basta executar:

long-command & sleep 300; do-this-after-five-minutes

O do-this-after-five-minutes será executado após cinco minutos. O long-command será executado em segundo plano.

    
por 28.05.2016 / 11:36
5

Você pode usar este script:

#!/bin/bash

TEMPFILE="$(mktemp)"
STARTTIME="$(date +%s)"
(./longprocess; rm -f "$TEMPFILE") &
while [ -f "$TEMPFILE" ]; do
    sleep 1s
    NOW="$(date +%s)"
    if (( (NOW-STARTTIME) % 300 == 0 )); then
        echo "$(( (NOW-STARTTIME)/60 )) minute(s) elapsed"
    fi
done
echo "Done!!!"

Ele executa seu longprocess em um sub-shell e monitora o arquivo 'lock' criado anteriormente para existir.

    
por 28.05.2016 / 11:11
4

Existe um folheto para isso:

( ( sleep $TIMEOUT ; echo "5 minutes complete") & $COMMAND )

No seu caso TIMEOUT = 5m e COMMAND é o comando longo.

Veja também minha resposta para esta postagem Tempo limite com 'reinicialização da rede de serviço '

    
por 28.05.2016 / 11:42
3
#! /bin/bash

( sleep 4 ) & # <-- The long running process.

seconds=1
while jobs %1 &>/dev/null ; do
    echo $((seconds++)) seconds complete
    sleep 1    
done
echo Done.

jobs %1 falha quando o trabalho% 1 parou.

Observe que, por períodos mais longos, $ segundos podem ficar fora de sincronia com o tempo real. É melhor armazenar o horário de início e calcular a diferença para o tempo real.

    
por 28.05.2016 / 11:20