Como ativamente grep log nos últimos 15 segundos para uma frase?

1

Eu tenho este script bash e dentro do script, eu estou tentando grep um log para as palavras "mudança de status" e depois eu encontrar a linha mais recente que contém as palavras "mudança de status" (também conhecido como o status mais recente mudar), eu grep essa linha para a palavra "Backup".

O problema é que atualmente estou colocando-o em suspensão por 15 segundos primeiro, para que o log tenha tempo para ser atualizado da alteração de status mais recente, mas quero uma solução melhor para isso.

Eu quero ativamente verificar o status e reportar uma falha somente após 15 segundos. Se possível, gostaria de substituir apenas as minhas primeiras duas linhas de código, porque planejo fazer outras modificações no restante. Qualquer ajuda seria muito apreciada! Aqui está o que eu tenho atualmente:

    sleep 15
    ssh server_one@$1 "grep 'status change' /apps/tests/$2 | tail -1 | grep 'Backup'"
    Output=$?
    if [[ ${Output} -ne 1 ]] ; then
            echo "Pass: It is Backup"
            echo "Pass: It is Backup"  >> $REPORT 
    else
            echo "Fail: It is not Backup"
            echo "Fail: It is not Backup" >> $REPORT
    fi
    
por saraberry 21.07.2016 / 00:24

1 resposta

0

Resposta destinada à versão original da pergunta

Para o seu comando, substituindo os comandos grep-tail-grep-if, tente:

awk '/status change/{last=$0} END{printf "It is %sBackup\n",(last~/Active/?"":"not ")}' "/apps/tests/$2"

Como funciona:

  • /status change/{last=$0}

    Sempre que uma linha contendo status change é encontrada, ela é salva na variável last .

  • END{printf "It is %sBackup\n",(last~/Active/?"":"not ")}

    Isso é executado depois que terminamos de ler o arquivo. Nesse momento, last conterá o conteúdo da última linha que continha status change . Se essa linha também contiver Active , então imprimiremos It is Backup . Caso contrário, imprimiremos It is not Backup .

    A presença ou ausência da palavra not é controlada pela instrução ternária aparentemente complexa: (last~/Active/?"":"not ") . Esta declaração apenas verifica se last~/Active/ é verdadeiro (o que significa que a última linha contém Active ). Em caso afirmativo, a instrução ternary retorna a string vazia "" . Caso contrário, retorna a string "not " .

Monitoramento contínuo

Para monitorar continuamente:

ssh "server_one@$1" tail -f "/apps/tests/$2" | awk '/status change/{printf "It is %sBackup\n",($0~/Backup/?"":"not ")}'
    
por 21.07.2016 / 00:36