Execute um script Shell e leia a saída em uma variável e execute outro script baseado na saída

1

Eu sou um novato no sistema Linux. Meu requisito é executar um script de status do Linux que mostre uma mensagem (a mensagem é "App is running" ou "App is not running").

Se a mensagem for "App is running", execute outro script de shell para parar o aplicativo. Em seguida, execute o script de shell de status novamente após alguns segundos. Quando eu ler "O aplicativo não está em execução", execute o script de implantação para implantar o novo aplicativo.

O script de status está escrito em Bash:

if [ "$(ps -ef | grep -i cat ${TPSHUB_HOME}/current.pid
        | grep -v grep|awk '{ print $2 }')" ];then 
   echo "TpsHub is RUNNING" 
else 
    echo "TpsHub is NOT running" 
fi 
exit
    
por user3100063 13.12.2013 / 17:32

2 respostas

3

  while true ; do
     if .... (your condition)
            echo "TpsHub is RUNNING" 
            . /path/to/stopping/script
            sleep 5
     else
            echo "TpsHub is NOT running" 
            . /path/to/deploy/script
            exit 0
    fi
 done

Continuará executando em loop até que a condição seja satisfeita e, em seguida, saia após a conclusão da implantação. Se não parar dentro de 5s, o script de parada será executado novamente

    
por 13.12.2013 / 19:18
0

Aqui está outra solução que encurta seu método de verificar se o PID existe ou não por uma chamada para ps -p com seu PID:

while true; do
    if ps -p "$(<$TPSHUB_HOME/current.pid)" &> /dev/null; then
        # announce running, kill tpshub and sleep 
    else
        # announce not running, start tpshub and quit
    fi
done

Note que você também pode usar xargs com ps e um redirecionamento para usar o valor PID armazenado no arquivo:

if xargs ps -p < "$TPSHUB_HOME/current.pid" &> /dev/null; then ...
    
por 17.12.2013 / 16:47