espera por tempo predefinido antes de sair do script

1

Eu tenho um servidor de aplicativos em execução na minha caixa unix com o nome do processo como abc_test . Eu tenho um script de shell no qual eu tenho que parar meu servidor usando /opt/abc/bin/stop . Agora, às vezes, meu servidor não é interrompido, portanto, preciso verificar se meu processo ainda está em execução ou não. Se estiver em execução, durma por alguns segundos e verifique novamente se o processo ainda está em execução ou não. Se após 5 minutos o processo ainda estiver em execução, quero sair com êxito do script de shell, mas se o processo não estiver em execução, saia também com êxito do script de shell.

Então eu criei o script abaixo, mas não consigo entender como adicionar essa coisa de 5 minutos no meu script de shell abaixo. O meu roteiro abaixo fará exatamente o que estou pensando? Eu acho que isso pode ser melhorado também.

#!/bin/bash

/opt/abc/bin/stop

# Wait for 10 second
sleep 10

# Number of seconds to wait
WAIT_SECONDS=300
# Counter to keep count of how many seconds have passed
count=0

while pgrep abc_test > /dev/null
do
    echo "server is still running."
    # Wait for one second
    sleep 1
    # Increment the second counter
    ((count++))
    # Has the process been killed? If so, exit the loop.
    if ! pgrep abc_test > /dev/null ; then
        break
    fi
    # Have we exceeded $WAIT_SECONDS? If so exit the loop
    if [ $count -gt $WAIT_SECONDS ]; then
        break
    fi  
done
    
por user1950349 17.12.2015 / 01:48

1 resposta

3

Assumindo que /opt/abc/bin/stop não bloqueia o seu script parece funcionar.
Como muru sugeriu, você poderia ignorar a variável $count e usar o $SECONDS incorporado. Isso levaria a um código como este:

/opt/abc/bin/stop
# Wait for 10 second
sleep 10
# Number of seconds to wait
WAIT_SECONDS=300
while pgrep abc_test > /dev/null
do
    echo "server is still running. Seconds: $SECONDS"
    # Wait for one second
    sleep 1
    # Have we exceeded $WAIT_SECONDS? If so exit the loop
    if [ $SECONDS -gt $WAIT_SECONDS ]; then
        break
    fi
done

No caso de /opt/abc/bin/stop DOES bloquear, basta chamá-lo no fundo como:

/opt/abc/bin/stop &
    
por 17.12.2015 / 02:09