Enviando um email de alerta se o tempo para um comando curl exceder 1 seg

0

Estou tentando escrever um liner para enviar um email de alerta se o tempo gasto para o comando curl exceder 1 segundo.

if time curl {URI} > 1; then mailx -r [email protected] -s ALERT; fi

Como o comando time retorna mais do que apenas um valor numérico, isso falha.

Alguma idéia de como posso conseguir isso?

    
por Saqib Ali 08.05.2018 / 20:42

3 respostas

1

Eu salvaria o PID do processo curl , sleep a segundo e apenas testaria se ele ainda está sendo executado com kill :

curl … &
pid=$!
sleep 1
if kill -0 $pid &>/dev/null; then
  mailx -r [email protected] -s ALERT
fi

Você pode testar isso facilmente com sleep 1 ou sleep 2 , respectivamente:

$ sleep 1 & pid=$!; sleep 1; if kill -0 $pid &>/dev/null; then echo running; fi
[1] 27520
[1]+  Done                    sleep 1
$ sleep 2 & pid=$!; sleep 1; if kill -0 $pid &>/dev/null; then echo running; fi
[1] 27599
running
    
por dessert 08.05.2018 / 23:08
1

Pelo que parece, o resultado de curl não parece importar.

Portanto, proponho matar o comando se ele ultrapassar um segundo usando tempo limite . Aqui está o one-liner :

timeout 1s curl {URI} || mailx -r [email protected] -s ALERT

Se expirar, ele retornará um erro e o comando mailx será executado.

Não foi testado, mas isso deve funcionar.

    
por solsTiCe 08.05.2018 / 20:52
1

Curl tem uma opção para isso, --max-time (e --connect-time, se você quiser controlar o tempo gasto na fase de conexão na sessão). Se o tempo limite ocorrer, o curl retornará o código de erro 28.

Então, algo assim:

curl --max-time 60 <URL>
if [ $? -eq 28 ]
then 
  mailx -r [email protected] -s ALERT
fi

deve fazer isso.

Eu encontrei este site Everything Curl , que descreve os recursos do Curl.

    
por Soren A 09.05.2018 / 13:13